8000 Fix regression in WiFiClientSecure, update HTTPS test case (#2150) · jsdevel/Arduino@e64e32b · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e64e32b

Browse files
committed
Fix regression in WiFiClientSecure, update HTTPS test case (esp8266#2150)
1 parent da17d54 commit e64e32b

File tree

3 files changed

+35
-25
lines changed

3 files changed

+35
-25
lines changed

libraries/ESP8266WiFi/src/WiFiClientSecure.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ static int s_pk_refcnt = 0;
5757
uint8_t* default_certificate = 0;
5858
uint32_t default_certificate_len = 0;
5959
static bool default_certificate_dynamic = false;
60-
static ClientContext* s_io_ctx = nullptr;
6160

6261
static void clear_private_key();
6362
static void clear_certificate();
@@ -82,6 +81,8 @@ class SSLContext {
8281
if (_ssl_ctx_refcnt == 0) {
8382
ssl_ctx_free(_ssl_ctx);
8483
}
84+
85+
s_io_ctx = nullptr;
8586
}
8687

8788
void ref() {
@@ -95,6 +96,7 @@ class SSLContext {
9596
}
9697

9798
void connect(ClientContext* ctx, const char* hostName, uint32_t timeout_ms) {
99+
s_io_ctx = ctx;
98100
_ssl = ssl_client_new(_ssl_ctx, 0, nullptr, 0, hostName);
99101
uint32_t t = millis();
100102

@@ -107,6 +109,10 @@ class SSLContext {
107109
}
108110
}
109111

112+
void stop() {
113+
s_io_ctx = nullptr;
114+
}
115+
110116
bool connected() {
111117
return _ssl != nullptr && ssl_handshake_status(_ssl) == SSL_OK;
112118
}
@@ -173,6 +179,10 @@ class SSLContext {
173179
return _ssl;
174180
}
175181

182+
static ClientContext* getIOContext(int fd) {
183+
return s_io_ctx;
184+
}
185+
176186
protected:
177187
int _readAll() {
178188
if (!_ssl)
@@ -201,18 +211,18 @@ class SSLContext {
201211
int _refcnt = 0;
202212
const uint8_t* _read_ptr = nullptr;
203213
size_t _available = 0;
214+
static ClientContext* s_io_ctx;
204215
};
205216

206217
SSL_CTX* SSLContext::_ssl_ctx = nullptr;
207218
int SSLContext::_ssl_ctx_refcnt = 0;
208-
219+
ClientContext* SSLContext::s_io_ctx = nullptr;
209220

210221
WiFiClientSecure::WiFiClientSecure() {
211222
++s_pk_refcnt;
212223
}
213224

214225
WiFiClientSecure::~WiFiClientSecure() {
215-
s_io_ctx = nullptr;
216226
if (_ssl) {
217227
_ssl->unref();
218228
}
@@ -264,8 +274,6 @@ int WiFiClientSecure::_connectSSL(const char* hostName) {
264274
_ssl = nullptr;
265275
}
266276

267-
s_io_ctx = _client;
268-
269277
_ssl = new SSLContext;
270278
_ssl->ref();
271279
_ssl->connect(_client, hostName, 5000);
@@ -371,7 +379,9 @@ uint8_t WiFiClientSecure::connected() {
371379
}
372380

373381
void WiFiClientSecure::stop() {
374-
s_io_ctx = nullptr;
382+
if (_ssl) {
383+
_ssl->stop();
384+
}
375385
WiFiClient::stop();
376386
}
377387

@@ -525,7 +535,7 @@ static void clear_certificate() {
525535
}
526536

527537
extern "C" int ax_port_read(int fd, uint8_t* buffer, size_t count) {
528-
ClientContext* _client = s_io_ctx;
538+
ClientContext* _client = SSLContext::getIOContext(fd);
529539
if (!_client || _client->state() != ESTABLISHED && !_client->getSize()) {
530540
errno = EIO;
531541
return -1;
@@ -542,7 +552,7 @@ extern "C" int ax_port_read(int fd, uint8_t* buffer, size_t count) {
542552
}
543553

544554
extern "C" int ax_port_write(int fd, uint8_t* buffer, size_t count) {
545-
ClientContext* _client = s_io_ctx;
555+
ClientContext* _client = SSLContext::getIOContext(fd);
546556
if (!_client || _client->state() != ESTABLISHED) {
547557
errno = EIO;
548558
return -1;
Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
-----BEGIN CERTIFICATE-----
2-
MIICzzCCAbcCCQCUajf39FoF8jANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtj
3-
YS50bHMudGVzdDAeFw0xNjA0MjIxMTU1MTlaFw0xNzA0MjIxMTU1MTlaMD0xITAf
4-
BgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAwwPc2VydmVy
5-
LnRscy50ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwhyGSO13
6-
/ozG0rL6FxDaaxYgMyPVK3hIhTHfKOK/eRZFRDFAhYudz9NbkvUMIF1SToED9FBh
7-
MbJrkPzCU3cLC1zgnTLseoOS3FKC8xVfJVwsWD8YjMvyQUV/Uo9TAHQSA4SfOB4W
8-
JjRBMX2GCoWLK5wVzxX+XGd5DnqME4n/CG+Il1t8mB+ACeA1FKwVPTi1wGvDzuCo
9-
swSEX3J08JB9rP5dix7t+Fezgr6PkvUcnAcu4utAw6f6c0LoHk0SnyXJg1jTdKrl
10-
J8dIyWQR0cvaxbF+04hvpDepx/62CP+aRs1zcC37eEQ3BVf4phJXbwuXbT7a1CUf
11-
XQ0cWnJg8mdfcQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBV7ZiwVM8alxPN9vd/
12-
Ze8EiidSuztkbtZX3mhHfkcJ2Q5c+tZ0Oxy4/g6oISe1+NOQJDMrsARrdWVPmmsb
13-
ihSHNdS6t0DTcWR5h+i/rnGh+cGiWOJKfhNWvpCVuU6YRZWhYOztL8p6iHoG3ZBi
14-
+zo9GD71FNSRQxMois9sR9q/IgOmkm8CjQgYsv9bQ+Le4mRqfaOCOSoQvsRyLoam
15-
lNl85gzvVygHYPP9ypiia8btyOHwDSHiV8UhKaERSGKFqznPmTTwTQNXEtQylCXG
16-
C+13mMGVr49yP4cuYaM8mfL8Rg7Im8Mfa0GXq5PBwEFFYpR9xnbBouQv5erYTQdl
17-
Oxqk
2+
MIIC3zCCAccCCQCUajf39FoF9jANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtj
3+
YS50bHMudGVzdDAeFw0xNjA2MTUwMjQ2MzFaFw0xNzA2MTUwMjQ2MzFaME0xCzAJ
4+
BgNVBAYTAkNOMREwDwYDVQQIDAhTaGFuZ2hhaTESMBAGA1UECgwJRXNwcmVzc2lm
5+
MRcwFQYDVQQDDA4xOTIuMTY4Ljc3LjIwODCCASIwDQYJKoZIhvcNAQEBBQADggEP
6+
ADCCAQoCggEBAMIchkjtd/6MxtKy+hcQ2msWIDMj1St4SIUx3yjiv3kWRUQxQIWL
7+
nc/TW5L1DCBdUk6BA/RQYTGya5D8wlN3Cwtc4J0y7HqDktxSgvMVXyVcLFg/GIzL
8+
8kFFf1KPUwB0EgOEnzgeFiY0QTF9hgqFiyucFc8V/lxneQ56jBOJ/whviJdbfJgf
9+
gAngNRSsFT04tcBrw87gqLMEhF9ydPCQfaz+XYse7fhXs4K+j5L1HJwHLuLrQMOn
10+
+nNC6B5NEp8lyYNY03Sq5SfHSMlkEdHL2sWxftOIb6Q3qcf+tgj/mkbNc3At+3hE
11+
NwVX+KYSV28Ll20+2tQlH10NHFpyYPJnX3ECAwEAATANBgkqhkiG9w0BAQsFAAOC
12+
AQEAMzNNwXnhp1OyNinGk700jRfe6zwdkpo1ZkclUD7fVEfnWxBj6j2lXReC6WT1
13+
isWXe/M9k+HS0fK7rTqDumeZYgp/Ui5LKgD2JTvLX91toG7apATWqLM1XPtLEGub
14+
webPO2CW/7aRfkPlXvP4Ss/QbqawxkmUKW3kJ4Lw1mmklu9ULGfiHPPUKvY5Qbe9
15+
9aDC/aTrjiaDmNoToZfAWuFBnxz95bKqFdbij35ZYzyVSNpezePtdOaDBR2mOMYd
16+
P54ENzFbOjVRm3K+7I9S+xa/lUPWnfjVJ026JDw/3/HVWvnwkZI8xNWVOk5CbdPH
17+
7d5Md13cmF1VQ0VNDqvqI3TZ5g==
1818
-----END CERTIFICATE-----

tests/device/test_http_client/test_http_client.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ void setup()
1919
BS_RUN(Serial);
2020
}
2121

22-
const char* fp = "40 A3 6C E3 8A DF A2 D4 13 B0 32 5C 87 44 54 28 0B CE C5 A4";
22+
const char* fp = "44 40 9E 34 92 2D E4 61 A4 89 A8 D5 7F 71 B7 62 B3 FD DD E1";
2323

2424
TEST_CASE("HTTP GET & POST requests", "[HTTPClient]")
2525
{

0 commit comments

Comments
 (0)
< 2AA0 /div>
0