@@ -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 ((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+ }
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 ((void  *)_CA_cert);
334+     _ca_cert_free = false ;
335+   }
313336  _CA_cert = rootCA;
314337  _use_insecure = false ;
315338}
@@ -327,10 +350,18 @@ void NetworkClientSecure::setCACertBundle(const uint8_t *bundle) {
327350}
328351
329352void  NetworkClientSecure::setCertificate (const  char  *client_ca) {
353+   if  (_cert_free && _cert) {
354+     free ((void  *)_cert);
355+     _cert_free = false ;
356+   }
330357  _cert = client_ca;
331358}
332359
333360void  NetworkClientSecure::setPrivateKey (const  char  *private_key) {
361+   if  (_private_key_free && _private_key) {
362+     free ((void  *)_private_key);
363+     _private_key_free = false ;
364+   }
334365  _private_key = private_key;
335366}
336367
@@ -369,6 +400,7 @@ bool NetworkClientSecure::loadCACert(Stream &stream, size_t size) {
369400  bool  ret = false ;
370401  if  (dest) {
371402    setCACert (dest);
403+     _ca_cert_free = true ;
372404    ret = true ;
373405  }
374406  return  ret;
@@ -382,6 +414,7 @@ bool NetworkClientSecure::loadCertificate(Stream &stream, size_t size) {
382414  bool  ret = false ;
383415  if  (dest) {
384416    setCertificate (dest);
417+     _cert_free = true ;
385418    ret = true ;
386419  }
387420  return  ret;
@@ -395,6 +428,7 @@ bool NetworkClientSecure::loadPrivateKey(Stream &stream, size_t size) {
395428  bool  ret = false ;
396429  if  (dest) {
397430    setPrivateKey (dest);
431+     _private_key_free = true ;
398432    ret = true ;
399433  }
400434  return  ret;
0 commit comments