summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/stack/stack.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/stack/stack.c')
-rw-r--r--src/lib/libcrypto/stack/stack.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/lib/libcrypto/stack/stack.c b/src/lib/libcrypto/stack/stack.c
index 02857f0446..2496f28a8c 100644
--- a/src/lib/libcrypto/stack/stack.c
+++ b/src/lib/libcrypto/stack/stack.c
@@ -106,6 +106,8 @@ STACK *sk_dup(STACK *sk)
106 ret->comp=sk->comp; 106 ret->comp=sk->comp;
107 return(ret); 107 return(ret);
108err: 108err:
109 if(ret)
110 sk_free(ret);
109 return(NULL); 111 return(NULL);
110 } 112 }
111 113
@@ -120,9 +122,9 @@ STACK *sk_new(int (*c)(const char * const *, const char * const *))
120 int i; 122 int i;
121 123
122 if ((ret=(STACK *)OPENSSL_malloc(sizeof(STACK))) == NULL) 124 if ((ret=(STACK *)OPENSSL_malloc(sizeof(STACK))) == NULL)
123 goto err0; 125 goto err;
124 if ((ret->data=(char **)OPENSSL_malloc(sizeof(char *)*MIN_NODES)) == NULL) 126 if ((ret->data=(char **)OPENSSL_malloc(sizeof(char *)*MIN_NODES)) == NULL)
125 goto err1; 127 goto err;
126 for (i=0; i<MIN_NODES; i++) 128 for (i=0; i<MIN_NODES; i++)
127 ret->data[i]=NULL; 129 ret->data[i]=NULL;
128 ret->comp=c; 130 ret->comp=c;
@@ -130,9 +132,9 @@ STACK *sk_new(int (*c)(const char * const *, const char * const *))
130 ret->num=0; 132 ret->num=0;
131 ret->sorted=0; 133 ret->sorted=0;
132 return(ret); 134 return(ret);
133err1: 135err:
134 OPENSSL_free(ret); 136 if(ret)
135err0: 137 OPENSSL_free(ret);
136 return(NULL); 138 return(NULL);
137 } 139 }
138 140
@@ -316,7 +318,7 @@ char *sk_set(STACK *st, int i, char *value)
316 318
317void sk_sort(STACK *st) 319void sk_sort(STACK *st)
318 { 320 {
319 if (!st->sorted) 321 if (st && !st->sorted)
320 { 322 {
321 int (*comp_func)(const void *,const void *); 323 int (*comp_func)(const void *,const void *);
322 324