@@ -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 (_CA_cert);
92
+ }
93
+ if (_cert_free && _cert) {
94
+ free (_cert);
95
+ }
96
+ if (_private_key_free && _private_key) {
97
+ free (_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 (_CA_cert);
334
+ _ca_cert_free = false ;
335
+ }
313
336
_CA_cert = rootCA;
314
337
_use_insecure = false ;
315
338
}
@@ -325,10 +348,18 @@ void NetworkClientSecure::setCACertBundle(const uint8_t *bundle) {
325
348
}
326
349
327
350
void NetworkClientSecure::setCertificate (const char *client_ca) {
351
+ if (_cert_free && _cert) {
352
+ free (_cert);
353
+ _cert_free = false ;
354
+ }
328
355
_cert = client_ca;
329
356
}
330
357
331
358
void NetworkClientSecure::setPrivateKey (const char *private_key) {
359
+ if (_private_key_free && _private_key) {
360
+ free (_private_key);
361
+ _private_key_free = false ;
362
+ }
332
363
_private_key = private_key;
333
364
}
334
365
@@ -367,6 +398,7 @@ bool NetworkClientSecure::loadCACert(Stream &stream, size_t size) {
367
398
bool ret = false ;
368
399
if (dest) {
369
400
setCACert (dest);
401
+ _ca_cert_free = true ;
370
402
ret = true ;
371
403
}
372
404
return ret;
@@ -380,6 +412,7 @@ bool NetworkClientSecure::loadCertificate(Stream &stream, size_t size) {
380
412
bool ret = false ;
381
413
if (dest) {
382
414
setCertificate (dest);
415
+ _cert_free = true ;
383
416
ret = true ;
384
417
}
385
418
return ret;
@@ -393,6 +426,7 @@ bool NetworkClientSecure::loadPrivateKey(Stream &stream, size_t size) {
393
426
bool ret = false ;
394
427
if (dest) {
395
428
setPrivateKey (dest);
429
+ _private_key_free = true ;
396
430
ret = true ;
397
431
}
398
432
return ret;
0 commit comments