diff options
Diffstat (limited to 'src/lib/libssl/s23_srvr.c')
-rw-r--r-- | src/lib/libssl/s23_srvr.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/lib/libssl/s23_srvr.c b/src/lib/libssl/s23_srvr.c index 8743b61cbb..c5404ca0bc 100644 --- a/src/lib/libssl/s23_srvr.c +++ b/src/lib/libssl/s23_srvr.c | |||
@@ -139,11 +139,18 @@ SSL_METHOD *SSLv23_server_method(void) | |||
139 | 139 | ||
140 | if (init) | 140 | if (init) |
141 | { | 141 | { |
142 | memcpy((char *)&SSLv23_server_data, | 142 | CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD); |
143 | (char *)sslv23_base_method(),sizeof(SSL_METHOD)); | 143 | |
144 | SSLv23_server_data.ssl_accept=ssl23_accept; | 144 | if (init) |
145 | SSLv23_server_data.get_ssl_method=ssl23_get_server_method; | 145 | { |
146 | init=0; | 146 | memcpy((char *)&SSLv23_server_data, |
147 | (char *)sslv23_base_method(),sizeof(SSL_METHOD)); | ||
148 | SSLv23_server_data.ssl_accept=ssl23_accept; | ||
149 | SSLv23_server_data.get_ssl_method=ssl23_get_server_method; | ||
150 | init=0; | ||
151 | } | ||
152 | |||
153 | CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD); | ||
147 | } | 154 | } |
148 | return(&SSLv23_server_data); | 155 | return(&SSLv23_server_data); |
149 | } | 156 | } |
@@ -505,7 +512,7 @@ int ssl23_get_client_hello(SSL *s) | |||
505 | 512 | ||
506 | if (s->s3 != NULL) ssl3_free(s); | 513 | if (s->s3 != NULL) ssl3_free(s); |
507 | 514 | ||
508 | if (!BUF_MEM_grow(s->init_buf, | 515 | if (!BUF_MEM_grow_clean(s->init_buf, |
509 | SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER)) | 516 | SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER)) |
510 | { | 517 | { |
511 | goto err; | 518 | goto err; |