summaryrefslogtreecommitdiff
path: root/src/lib/libssl/s23_clnt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/s23_clnt.c')
-rw-r--r--src/lib/libssl/s23_clnt.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/lib/libssl/s23_clnt.c b/src/lib/libssl/s23_clnt.c
index 019e9aecee..64ee4269ec 100644
--- a/src/lib/libssl/s23_clnt.c
+++ b/src/lib/libssl/s23_clnt.c
@@ -87,18 +87,25 @@ SSL_METHOD *SSLv23_client_method(void)
87 87
88 if (init) 88 if (init)
89 { 89 {
90 memcpy((char *)&SSLv23_client_data, 90 CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
91 (char *)sslv23_base_method(),sizeof(SSL_METHOD)); 91
92 SSLv23_client_data.ssl_connect=ssl23_connect; 92 if (init)
93 SSLv23_client_data.get_ssl_method=ssl23_get_client_method; 93 {
94 init=0; 94 memcpy((char *)&SSLv23_client_data,
95 (char *)sslv23_base_method(),sizeof(SSL_METHOD));
96 SSLv23_client_data.ssl_connect=ssl23_connect;
97 SSLv23_client_data.get_ssl_method=ssl23_get_client_method;
98 init=0;
99 }
100
101 CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
95 } 102 }
96 return(&SSLv23_client_data); 103 return(&SSLv23_client_data);
97 } 104 }
98 105
99int ssl23_connect(SSL *s) 106int ssl23_connect(SSL *s)
100 { 107 {
101 BUF_MEM *buf; 108 BUF_MEM *buf=NULL;
102 unsigned long Time=time(NULL); 109 unsigned long Time=time(NULL);
103 void (*cb)(const SSL *ssl,int type,int val)=NULL; 110 void (*cb)(const SSL *ssl,int type,int val)=NULL;
104 int ret= -1; 111 int ret= -1;
@@ -152,6 +159,7 @@ int ssl23_connect(SSL *s)
152 goto end; 159 goto end;
153 } 160 }
154 s->init_buf=buf; 161 s->init_buf=buf;
162 buf=NULL;
155 } 163 }
156 164
157 if (!ssl3_setup_buffers(s)) { ret= -1; goto end; } 165 if (!ssl3_setup_buffers(s)) { ret= -1; goto end; }
@@ -200,6 +208,8 @@ int ssl23_connect(SSL *s)
200 } 208 }
201end: 209end:
202 s->in_handshake--; 210 s->in_handshake--;
211 if (buf != NULL)
212 BUF_MEM_free(buf);
203 if (cb != NULL) 213 if (cb != NULL)
204 cb(s,SSL_CB_CONNECT_EXIT,ret); 214 cb(s,SSL_CB_CONNECT_EXIT,ret);
205 return(ret); 215 return(ret);
@@ -363,7 +373,7 @@ static int ssl23_get_server_hello(SSL *s)
363 373
364 if (s->s3 != NULL) ssl3_free(s); 374 if (s->s3 != NULL) ssl3_free(s);
365 375
366 if (!BUF_MEM_grow(s->init_buf, 376 if (!BUF_MEM_grow_clean(s->init_buf,
367 SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER)) 377 SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER))
368 { 378 {
369 SSLerr(SSL_F_SSL23_GET_SERVER_HELLO,ERR_R_BUF_LIB); 379 SSLerr(SSL_F_SSL23_GET_SERVER_HELLO,ERR_R_BUF_LIB);