Set reference count earlier
authorKurt Roeckx <kurt@roeckx.be>
Tue, 24 Nov 2015 20:53:40 +0000 (21:53 +0100)
committerKurt Roeckx <kurt@roeckx.be>
Tue, 24 Nov 2015 20:53:40 +0000 (21:53 +0100)
Backport of 0e04674e964b905e67e3d215bcf888932c92765f

Reviewed-by: Steve Henson <steve@openssl.org>
RT #4047, #4110, MR #1356

ssl/ssl_cert.c
ssl/ssl_lib.c

index 5df2413f7190806b5b47ddceab3149bb0189edc7..9a4e10414967ebd93ca2ccf4cdbf114664fa1966 100644 (file)
@@ -206,6 +206,7 @@ CERT *ssl_cert_dup(CERT *cert)
 
     memset(ret, 0, sizeof(CERT));
 
+    ret->references = 1;
     ret->key = &ret->pkeys[cert->key - &cert->pkeys[0]];
     /*
      * or ret->key = ret->pkeys + (cert->key - cert->pkeys), if you find that
@@ -282,7 +283,6 @@ CERT *ssl_cert_dup(CERT *cert)
      * chain is held inside SSL_CTX
      */
 
-    ret->references = 1;
     /*
      * Set digests to defaults. NB: we don't copy existing values as they
      * will be set during handshake.
index 9cfeaf33ae2702d0ec91fa9fe244b2e683234eaf..93d1cbe438e443c4a7348c37fc1674991e87c3d1 100644 (file)
@@ -307,6 +307,7 @@ SSL *SSL_new(SSL_CTX *ctx)
     s->options = ctx->options;
     s->mode = ctx->mode;
     s->max_cert_list = ctx->max_cert_list;
+    s->references = 1;
 
     if (ctx->cert != NULL) {
         /*
@@ -375,7 +376,6 @@ SSL *SSL_new(SSL_CTX *ctx)
     if (!s->method->ssl_new(s))
         goto err;
 
-    s->references = 1;
     s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1;
 
     SSL_clear(s);