In asn1_d2i_read_bio, don't assume BIO_read will
[openssl.git] / ssl / s23_srvr.c
index 5c7e9fa97fcd6a9d45819a1340393a6d34bfd58f..c5404ca0bcd4c015f0273f38e22ef07bffb92585 100644 (file)
@@ -141,11 +141,14 @@ SSL_METHOD *SSLv23_server_method(void)
                {
                CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
 
-               memcpy((char *)&SSLv23_server_data,
-                       (char *)sslv23_base_method(),sizeof(SSL_METHOD));
-               SSLv23_server_data.ssl_accept=ssl23_accept;
-               SSLv23_server_data.get_ssl_method=ssl23_get_server_method;
-               init=0;
+               if (init)
+                       {
+                       memcpy((char *)&SSLv23_server_data,
+                               (char *)sslv23_base_method(),sizeof(SSL_METHOD));
+                       SSLv23_server_data.ssl_accept=ssl23_accept;
+                       SSLv23_server_data.get_ssl_method=ssl23_get_server_method;
+                       init=0;
+                       }
 
                CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
                }
@@ -509,7 +512,7 @@ int ssl23_get_client_hello(SSL *s)
 
                if (s->s3 != NULL) ssl3_free(s);
 
-               if (!BUF_MEM_grow(s->init_buf,
+               if (!BUF_MEM_grow_clean(s->init_buf,
                        SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER))
                        {
                        goto err;