From: Todd Short Date: Tue, 5 Jul 2016 13:59:29 +0000 (-0400) Subject: OCSP_request_add0_id() inconsistent error return X-Git-Tag: OpenSSL_1_1_0-pre6~145 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=415e7c488e09119a42be24129e38ddd43524ee06;p=oweals%2Fopenssl.git OCSP_request_add0_id() inconsistent error return There are two failure cases for OCSP_request_add_id(): 1. OCSP_ONEREQ_new() failure, where |cid| is not freed 2. sk_OCSP_ONEREQ_push() failure, where |cid| is freed This changes makes the error behavior consistent, such that |cid| is not freed when sk_OCSP_ONEREQ_push() fails. OpenSSL only takes ownership of |cid| when the function succeeds. Reviewed-by: Matt Caswell Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/1289) --- diff --git a/crypto/ocsp/ocsp_cl.c b/crypto/ocsp/ocsp_cl.c index d0ee0574d5..12d5bef574 100644 --- a/crypto/ocsp/ocsp_cl.c +++ b/crypto/ocsp/ocsp_cl.c @@ -35,8 +35,10 @@ OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid) return NULL; OCSP_CERTID_free(one->reqCert); one->reqCert = cid; - if (req && !sk_OCSP_ONEREQ_push(req->tbsRequest.requestList, one)) + if (req && !sk_OCSP_ONEREQ_push(req->tbsRequest.requestList, one)) { + one->reqCert = NULL; /* do not free on error */ goto err; + } return one; err: OCSP_ONEREQ_free(one);