diff options
author | miod <> | 2015-02-14 15:28:39 +0000 |
---|---|---|
committer | miod <> | 2015-02-14 15:28:39 +0000 |
commit | 0fedd9e776a0709854241ba1cf9cffb14930eb20 (patch) | |
tree | 5ed83fbf4241c53107d2a0b83a8e7183a6d65aa5 /src | |
parent | dd3659bdb2cb2efe9a1e088c40d40a97741b5e29 (diff) | |
download | openbsd-0fedd9e776a0709854241ba1cf9cffb14930eb20.tar.gz openbsd-0fedd9e776a0709854241ba1cf9cffb14930eb20.tar.bz2 openbsd-0fedd9e776a0709854241ba1cf9cffb14930eb20.zip |
Memory leak upon error in X509_add1_{trust,reject}_object.
ok doug@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/asn1/x_x509a.c | 30 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/asn1/x_x509a.c | 30 |
2 files changed, 46 insertions, 14 deletions
diff --git a/src/lib/libcrypto/asn1/x_x509a.c b/src/lib/libcrypto/asn1/x_x509a.c index c0624d674b..29817915b6 100644 --- a/src/lib/libcrypto/asn1/x_x509a.c +++ b/src/lib/libcrypto/asn1/x_x509a.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_x509a.c,v 1.13 2015/02/11 04:00:39 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509a.c,v 1.14 2015/02/14 15:28:39 miod Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -214,13 +214,21 @@ X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj) | |||
214 | { | 214 | { |
215 | X509_CERT_AUX *aux; | 215 | X509_CERT_AUX *aux; |
216 | ASN1_OBJECT *objtmp; | 216 | ASN1_OBJECT *objtmp; |
217 | int rc; | ||
218 | |||
217 | if (!(objtmp = OBJ_dup(obj))) | 219 | if (!(objtmp = OBJ_dup(obj))) |
218 | return 0; | 220 | return 0; |
219 | if (!(aux = aux_get(x))) | 221 | if (!(aux = aux_get(x))) |
220 | return 0; | 222 | goto err; |
221 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) | 223 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) |
222 | return 0; | 224 | goto err; |
223 | return sk_ASN1_OBJECT_push(aux->trust, objtmp); | 225 | rc = sk_ASN1_OBJECT_push(aux->trust, objtmp); |
226 | if (rc != 0) | ||
227 | return rc; | ||
228 | |||
229 | err: | ||
230 | ASN1_OBJECT_free(objtmp); | ||
231 | return 0; | ||
224 | } | 232 | } |
225 | 233 | ||
226 | int | 234 | int |
@@ -228,13 +236,21 @@ X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj) | |||
228 | { | 236 | { |
229 | X509_CERT_AUX *aux; | 237 | X509_CERT_AUX *aux; |
230 | ASN1_OBJECT *objtmp; | 238 | ASN1_OBJECT *objtmp; |
239 | int rc; | ||
240 | |||
231 | if (!(objtmp = OBJ_dup(obj))) | 241 | if (!(objtmp = OBJ_dup(obj))) |
232 | return 0; | 242 | return 0; |
233 | if (!(aux = aux_get(x))) | 243 | if (!(aux = aux_get(x))) |
234 | return 0; | 244 | goto err; |
235 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) | 245 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) |
236 | return 0; | 246 | goto err; |
237 | return sk_ASN1_OBJECT_push(aux->reject, objtmp); | 247 | rc = sk_ASN1_OBJECT_push(aux->reject, objtmp); |
248 | if (rc != 0) | ||
249 | return rc; | ||
250 | |||
251 | err: | ||
252 | ASN1_OBJECT_free(objtmp); | ||
253 | return 0; | ||
238 | } | 254 | } |
239 | 255 | ||
240 | void | 256 | void |
diff --git a/src/lib/libssl/src/crypto/asn1/x_x509a.c b/src/lib/libssl/src/crypto/asn1/x_x509a.c index c0624d674b..29817915b6 100644 --- a/src/lib/libssl/src/crypto/asn1/x_x509a.c +++ b/src/lib/libssl/src/crypto/asn1/x_x509a.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_x509a.c,v 1.13 2015/02/11 04:00:39 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509a.c,v 1.14 2015/02/14 15:28:39 miod Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -214,13 +214,21 @@ X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj) | |||
214 | { | 214 | { |
215 | X509_CERT_AUX *aux; | 215 | X509_CERT_AUX *aux; |
216 | ASN1_OBJECT *objtmp; | 216 | ASN1_OBJECT *objtmp; |
217 | int rc; | ||
218 | |||
217 | if (!(objtmp = OBJ_dup(obj))) | 219 | if (!(objtmp = OBJ_dup(obj))) |
218 | return 0; | 220 | return 0; |
219 | if (!(aux = aux_get(x))) | 221 | if (!(aux = aux_get(x))) |
220 | return 0; | 222 | goto err; |
221 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) | 223 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) |
222 | return 0; | 224 | goto err; |
223 | return sk_ASN1_OBJECT_push(aux->trust, objtmp); | 225 | rc = sk_ASN1_OBJECT_push(aux->trust, objtmp); |
226 | if (rc != 0) | ||
227 | return rc; | ||
228 | |||
229 | err: | ||
230 | ASN1_OBJECT_free(objtmp); | ||
231 | return 0; | ||
224 | } | 232 | } |
225 | 233 | ||
226 | int | 234 | int |
@@ -228,13 +236,21 @@ X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj) | |||
228 | { | 236 | { |
229 | X509_CERT_AUX *aux; | 237 | X509_CERT_AUX *aux; |
230 | ASN1_OBJECT *objtmp; | 238 | ASN1_OBJECT *objtmp; |
239 | int rc; | ||
240 | |||
231 | if (!(objtmp = OBJ_dup(obj))) | 241 | if (!(objtmp = OBJ_dup(obj))) |
232 | return 0; | 242 | return 0; |
233 | if (!(aux = aux_get(x))) | 243 | if (!(aux = aux_get(x))) |
234 | return 0; | 244 | goto err; |
235 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) | 245 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) |
236 | return 0; | 246 | goto err; |
237 | return sk_ASN1_OBJECT_push(aux->reject, objtmp); | 247 | rc = sk_ASN1_OBJECT_push(aux->reject, objtmp); |
248 | if (rc != 0) | ||
249 | return rc; | ||
250 | |||
251 | err: | ||
252 | ASN1_OBJECT_free(objtmp); | ||
253 | return 0; | ||
238 | } | 254 | } |
239 | 255 | ||
240 | void | 256 | void |