Fix a memory leak in 'sk_dup' in the case a realloc() fails. Also, tidy up
authorGeoff Thorpe <geoff@openssl.org>
Thu, 31 May 2001 19:01:08 +0000 (19:01 +0000)
committerGeoff Thorpe <geoff@openssl.org>
Thu, 31 May 2001 19:01:08 +0000 (19:01 +0000)
a bit of weird code in sk_new.

CHANGES
crypto/stack/stack.c

diff --git a/CHANGES b/CHANGES
index ccc991b959070306a15dace9d7183cb245787eec..03f9d02abe2f1d24d3e5a7d1ba7c23d78034d522 100644 (file)
--- a/CHANGES
+++ b/CHANGES
          *) applies to 0.9.6a (/0.9.6b) and 0.9.7
          +) applies to 0.9.7 only
 
+  +) Fix a memory leak in 'sk_dup()' in the case reallocation fails. (Also
+     tidy up some unecessarily weird code in 'sk_new()').
+     [Geoff, reported by Diego Tartara <dtartara@novamens.com>]
+
   +) Change the key loading routines for ENGINEs to use the same kind
      callback (pem_password_cb) as all other routines that need this
      kind of callback.
index 9a75e433d711647447a26b8038c9fe1bbe186b0b..2496f28a8c01b0faaf36d8355495ce249aa2855c 100644 (file)
@@ -106,6 +106,8 @@ STACK *sk_dup(STACK *sk)
        ret->comp=sk->comp;
        return(ret);
 err:
+       if(ret)
+               sk_free(ret);
        return(NULL);
        }
 
@@ -120,9 +122,9 @@ STACK *sk_new(int (*c)(const char * const *, const char * const *))
        int i;
 
        if ((ret=(STACK *)OPENSSL_malloc(sizeof(STACK))) == NULL)
-               goto err0;
+               goto err;
        if ((ret->data=(char **)OPENSSL_malloc(sizeof(char *)*MIN_NODES)) == NULL)
-               goto err1;
+               goto err;
        for (i=0; i<MIN_NODES; i++)
                ret->data[i]=NULL;
        ret->comp=c;
@@ -130,9 +132,9 @@ STACK *sk_new(int (*c)(const char * const *, const char * const *))
        ret->num=0;
        ret->sorted=0;
        return(ret);
-err1:
-       OPENSSL_free(ret);
-err0:
+err:
+       if(ret)
+               OPENSSL_free(ret);
        return(NULL);
        }