Azure IoT common library

Dependents:   STM32F746_iothub_client_sample_mqtt f767zi_mqtt iothub_client_sample_amqp iothub_client_sample_http ... more

Revision:
39:05674f3c9d9d
Parent:
38:ed9c888e5e12
Child:
40:3f3af6cd8a01
--- a/tlsio_wolfssl.c	Wed Jan 17 08:58:29 2018 -0800
+++ b/tlsio_wolfssl.c	Tue Jan 30 08:23:35 2018 -0800
@@ -2,11 +2,14 @@
 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
 
 #include <stdlib.h>
+#define WOLFSSL_OPTIONS_IGNORE_SYS
+#include "wolfssl/options.h"
 #include "wolfssl/ssl.h"
 #include "wolfssl/error-ssl.h"
 #include <stdio.h>
 #include <stdbool.h>
 #include <string.h>
+#include "azure_c_shared_utility/gballoc.h"
 #include "azure_c_shared_utility/tlsio.h"
 #include "azure_c_shared_utility/tlsio_wolfssl.h"
 #include "azure_c_shared_utility/socketio.h"
@@ -369,7 +372,7 @@
     {
         result = WOLFSSL_CBIO_ERR_WANT_READ;
     }
-    else if ((result == 0) && tls_io_instance->tlsio_state == TLSIO_STATE_CLOSING)
+    else if ((result == 0) && (tls_io_instance->tlsio_state == TLSIO_STATE_CLOSING || tls_io_instance->tlsio_state == TLSIO_STATE_NOT_OPEN))
     {
         result = WOLFSSL_CBIO_ERR_CONN_CLOSE;
     }
@@ -469,6 +472,7 @@
 static void destroy_wolfssl_instance(TLS_IO_INSTANCE* tls_io_instance)
 {
     wolfSSL_free(tls_io_instance->ssl);
+    tls_io_instance->ssl = NULL;
 }
 
 static int create_wolfssl_instance(TLS_IO_INSTANCE* tls_io_instance)
@@ -638,22 +642,27 @@
         if (tls_io_instance->socket_io_read_bytes != NULL)
         {
             free(tls_io_instance->socket_io_read_bytes);
+            tls_io_instance->socket_io_read_bytes = NULL;
         }
-
         if (tls_io_instance->certificate != NULL)
         {
             free(tls_io_instance->certificate);
+            tls_io_instance->certificate = NULL;
         }
         if (tls_io_instance->x509certificate != NULL)
         {
             free(tls_io_instance->x509certificate);
+            tls_io_instance->x509certificate = NULL;
         }
         if (tls_io_instance->x509privatekey != NULL)
         {
             free(tls_io_instance->x509privatekey);
+            tls_io_instance->x509privatekey = NULL;
         }
 
         wolfSSL_CTX_free(tls_io_instance->ssl_context);
+        tls_io_instance->ssl_context = NULL;
+
         xio_destroy(tls_io_instance->socket_io);
         free(tls_io);
     }
@@ -766,9 +775,9 @@
 {
     int result;
 
-    if (tls_io == NULL)
+    if (tls_io == NULL || buffer == NULL || size == 0)
     {
-        LogError("NULL tls_io handle");
+        LogError("Invalid parameter specified tls_io: %p, buffer: %p, size: %d", tls_io, buffer, size);
         result = __FAILURE__;
     }
     else
@@ -866,7 +875,7 @@
         {
             result = process_option(&tls_io_instance->x509certificate, optionName, value);
         }
-        else if (strcmp(SU_OPTION_X509_PRIVATE_KEY, optionName) == 0 | strcmp(OPTION_X509_ECC_KEY, optionName) == 0)
+        else if (strcmp(SU_OPTION_X509_PRIVATE_KEY, optionName) == 0 || strcmp(OPTION_X509_ECC_KEY, optionName) == 0)
         {
             result = process_option(&tls_io_instance->x509privatekey, optionName, value);
         }