@@ -40,6 +40,10 @@ NetworkClientSecure::NetworkClientSecure() {
4040 sslclient->socket = -1 ;
4141 sslclient->handshake_timeout = 120000 ;
4242 _use_insecure = false ;
43+ _stillinPlainStart = false ;
44+ _ca_cert_free = false ;
45+ _cert_free = false ;
46+ _private_key_free = false ;
4347 _CA_cert = NULL ;
4448 _cert = NULL ;
4549 _private_key = NULL ;
@@ -68,6 +72,11 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
6872 _connected = true ;
6973 }
7074
75+ _use_insecure = false ;
76+ _stillinPlainStart = false ;
77+ _ca_cert_free = false ;
78+ _cert_free = false ;
79+ _private_key_free = false ;
7180 _CA_cert = NULL ;
7281 _cert = NULL ;
7382 _private_key = NULL ;
@@ -77,7 +86,17 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
7786 _alpn_protos = NULL ;
7887}
7988
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+ }
81100
82101void NetworkClientSecure::stop () {
83102 stop_ssl_socket (sslclient.get ());
@@ -310,6 +329,10 @@ void NetworkClientSecure::setInsecure() {
310329}
311330
312331void NetworkClientSecure::setCACert (const char *rootCA) {
332+ if (_ca_cert_free && _CA_cert) {
333+ free (_CA_cert);
334+ _ca_cert_free = false ;
335+ }
313336 _CA_cert = rootCA;
314337 _use_insecure = false ;
315338}
@@ -325,10 +348,18 @@ void NetworkClientSecure::setCACertBundle(const uint8_t *bundle) {
325348}
326349
327350void NetworkClientSecure::setCertificate (const char *client_ca) {
351+ if (_cert_free && _cert) {
352+ free (_cert);
353+ _cert_free = false ;
354+ }
328355 _cert = client_ca;
329356}
330357
331358void NetworkClientSecure::setPrivateKey (const char *private_key) {
359+ if (_private_key_free && _private_key) {
360+ free (_private_key);
361+ _private_key_free = false ;
362+ }
332363 _private_key = private_key;
333364}
334365
@@ -367,6 +398,7 @@ bool NetworkClientSecure::loadCACert(Stream &stream, size_t size) {
367398 bool ret = false ;
368399 if (dest) {
369400 setCACert (dest);
401+ _ca_cert_free = true ;
370402 ret = true ;
371403 }
372404 return ret;
@@ -380,6 +412,7 @@ bool NetworkClientSecure::loadCertificate(Stream &stream, size_t size) {
380412 bool ret = false ;
381413 if (dest) {
382414 setCertificate (dest);
415+ _cert_free = true ;
383416 ret = true ;
384417 }
385418 return ret;
@@ -393,6 +426,7 @@ bool NetworkClientSecure::loadPrivateKey(Stream &stream, size_t size) {
393426 bool ret = false ;
394427 if (dest) {
395428 setPrivateKey (dest);
429+ _private_key_free = true ;
396430 ret = true ;
397431 }
398432 return ret;
0 commit comments