ec/ecp_nistz256.c: harmonize with latest indent script.
[oweals/openssl.git] / crypto / bio / bss_dgram.c
index 88ee559d98979b83cb34dd70c4072036ba198e74..d9deb37d80fab7b30ff251777853abc46d40741f 100644 (file)
@@ -66,6 +66,9 @@
 #include <openssl/bio.h>
 #ifndef OPENSSL_NO_DGRAM
 
+#if !(defined(_WIN32) || defined(OPENSSL_SYS_VMS))
+# include <sys/time.h>
+#endif
 #if defined(OPENSSL_SYS_VMS)
 #include <sys/timeb.h>
 #endif
@@ -1094,7 +1097,12 @@ static int dgram_sctp_free(BIO *a)
                return 0;
 
        data = (bio_dgram_sctp_data *)a->ptr;
-       if(data != NULL) OPENSSL_free(data);
+       if(data != NULL)
+               {
+               if(data->saved_message.data != NULL)
+                       OPENSSL_free(data->saved_message.data);
+               OPENSSL_free(data);
+               }
 
        return(1);
        }
@@ -1211,6 +1219,7 @@ static int dgram_sctp_read(BIO *b, char *out, int outl)
                                                dgram_sctp_write(data->saved_message.bio, data->saved_message.data,
                                                                 data->saved_message.length);
                                                OPENSSL_free(data->saved_message.data);
+                                               data->saved_message.data = NULL;
                                                data->saved_message.length = 0;
                                                }
 
@@ -1382,9 +1391,11 @@ static int dgram_sctp_write(BIO *b, const char *in, int inl)
        if (data->save_shutdown && !BIO_dgram_sctp_wait_for_dry(b))
        {
                data->saved_message.bio = b;
-               data->saved_message.length = inl;
+               if (data->saved_message.data)
+                       OPENSSL_free(data->saved_message.data);
                data->saved_message.data = OPENSSL_malloc(inl);
                memcpy(data->saved_message.data, in, inl);
+               data->saved_message.length = inl;
                return inl;
        }