@@ -40,6 +40,10 @@ NetworkClientSecure::NetworkClientSecure() {
40
40
sslclient->socket = -1 ;
41
41
sslclient->handshake_timeout = 120000 ;
42
42
_use_insecure = false ;
43
+ _stillinPlainStart = false ;
44
+ _ca_cert_free = false ;
45
+ _cert_free = false ;
46
+ _private_key_free = false ;
43
47
_CA_cert = NULL ;
44
48
_cert = NULL ;
45
49
_private_key = NULL ;
@@ -68,6 +72,11 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
68
72
_connected = true ;
69
73
}
70
74
75
+ _use_insecure = false ;
76
+ _stillinPlainStart = false ;
77
+ _ca_cert_free = false ;
78
+ _cert_free = false ;
79
+ _private_key_free = false ;
71
80
_CA_cert = NULL ;
72
81
_cert = NULL ;
73
82
_private_key = NULL ;
@@ -77,7 +86,17 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
77
86
_alpn_protos = NULL ;
78
87
}
79
88
80
- NetworkClientSecure::~NetworkClientSecure () {}
89
+ NetworkClientSecure::~NetworkClientSecure () {
90
+ if (_ca_cert_free && _CA_cert) {
91
+ free ((void *)_CA_cert);
92
+ }
93
+ if (_cert_free && _cert) {
94
+ free ((void *)_cert);
95
+ }
96
+ if (_private_key_free && _private_key) {
97
+ free ((void *)_private_key);
98
+ }
99
+ }
81
100
82
101
void NetworkClientSecure::stop () {
83
102
stop_ssl_socket (sslclient.get ());
@@ -310,6 +329,10 @@ void NetworkClientSecure::setInsecure() {
310
329
}
311
330
312
331
void NetworkClientSecure::setCACert (const char *rootCA) {
332
+ if (_ca_cert_free && _CA_cert) {
333
+ free ((void *)_CA_cert);
334
+ _ca_cert_free = false ;
335
+ }
313
336
_CA_cert = rootCA;
314
337
_use_insecure = false ;
315
338
}
@@ -327,10 +350,18 @@ void NetworkClientSecure::setCACertBundle(const uint8_t *bundle) {
327
350
}
328
351
329
352
void NetworkClientSecure::setCertificate (const char *client_ca) {
353
+ if (_cert_free && _cert) {
354
+ free ((void *)_cert);
355
+ _cert_free = false ;
356
+ }
330
357
_cert = client_ca;
331
358
}
332
359
333
360
void NetworkClientSecure::setPrivateKey (const char *private_key) {
361
+ if (_private_key_free && _private_key) {
362
+ free ((void *)_private_key);
363
+ _private_key_free = false ;
364
+ }
334
365
_private_key = private_key;
335
366
}
336
367
@@ -369,6 +400,7 @@ bool NetworkClientSecure::loadCACert(Stream &stream, size_t size) {
369
400
bool ret = false ;
370
401
if (dest) {
371
402
setCACert (dest);
403
+ _ca_cert_free = true ;
372
404
ret = true ;
373
405
}
374
406
return ret;
@@ -382,6 +414,7 @@ bool NetworkClientSecure::loadCertificate(Stream &stream, size_t size) {
382
414
bool ret = false ;
383
415
if (dest) {
384
416
setCertificate (dest);
417
+ _cert_free = true ;
385
418
ret = true ;
386
419
}
387
420
return ret;
@@ -395,6 +428,7 @@ bool NetworkClientSecure::loadPrivateKey(Stream &stream, size_t size) {
395
428
bool ret = false ;
396
429
if (dest) {
397
430
setPrivateKey (dest);
431
+ _private_key_free = true ;
398
432
ret = true ;
399
433
}
400
434
return ret;
0 commit comments