diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/bio/bss_dgram.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/lib/libcrypto/bio/bss_dgram.c b/src/lib/libcrypto/bio/bss_dgram.c index c6b552eb32..ecf12fcb33 100644 --- a/src/lib/libcrypto/bio/bss_dgram.c +++ b/src/lib/libcrypto/bio/bss_dgram.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: bss_dgram.c,v 1.38 2015/01/03 18:07:29 doug Exp $ */ | 1 | /* $OpenBSD: bss_dgram.c,v 1.39 2015/01/12 02:15:23 doug Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
| 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
| @@ -826,7 +826,11 @@ dgram_sctp_free(BIO *a) | |||
| 826 | return 0; | 826 | return 0; |
| 827 | 827 | ||
| 828 | data = (bio_dgram_sctp_data *)a->ptr; | 828 | data = (bio_dgram_sctp_data *)a->ptr; |
| 829 | free(data); | 829 | if (data != NULL) { |
| 830 | free(data->saved_message.data); | ||
| 831 | free(data); | ||
| 832 | a->ptr = NULL; | ||
| 833 | } | ||
| 830 | 834 | ||
| 831 | return (1); | 835 | return (1); |
| 832 | } | 836 | } |
| @@ -934,6 +938,7 @@ dgram_sctp_read(BIO *b, char *out, int outl) | |||
| 934 | dgram_sctp_write(data->saved_message.bio, data->saved_message.data, | 938 | dgram_sctp_write(data->saved_message.bio, data->saved_message.data, |
| 935 | data->saved_message.length); | 939 | data->saved_message.length); |
| 936 | free(data->saved_message.data); | 940 | free(data->saved_message.data); |
| 941 | data->saved_message.data = NULL; | ||
| 937 | data->saved_message.length = 0; | 942 | data->saved_message.length = 0; |
| 938 | } | 943 | } |
| 939 | 944 | ||
| @@ -1101,9 +1106,14 @@ dgram_sctp_write(BIO *b, const char *in, int inl) | |||
| 1101 | */ | 1106 | */ |
| 1102 | if (data->save_shutdown && !BIO_dgram_sctp_wait_for_dry(b)) { | 1107 | if (data->save_shutdown && !BIO_dgram_sctp_wait_for_dry(b)) { |
| 1103 | data->saved_message.bio = b; | 1108 | data->saved_message.bio = b; |
| 1104 | data->saved_message.length = inl; | 1109 | free(data->saved_message.data); |
| 1105 | data->saved_message.data = malloc(inl); | 1110 | data->saved_message.data = malloc(inl); |
| 1111 | if (data->saved_message.data == NULL) { | ||
| 1112 | data->_errno = ENOMEM; | ||
| 1113 | return -1; | ||
| 1114 | } | ||
| 1106 | memcpy(data->saved_message.data, in, inl); | 1115 | memcpy(data->saved_message.data, in, inl); |
| 1116 | data->saved_message.length = inl; | ||
| 1107 | return inl; | 1117 | return inl; |
| 1108 | } | 1118 | } |
| 1109 | 1119 | ||
