diff options
author | Kurt Roeckx <kurt@roeckx.be> | 2015-09-29 19:59:48 +0200 |
---|---|---|
committer | Kurt Roeckx <kurt@roeckx.be> | 2015-10-03 13:29:15 +0200 |
commit | 6b247c181726e7dd3744570b850c0cef60776c55 (patch) | |
tree | 10dbe4e30c40e160b96281638400283332896313 /crypto/asn1 | |
parent | d62c64b947ae96463a331de005165c57966d2149 (diff) |
Fix more d2i cases to properly update the input pointer
Thanks to David Benjamin <davidben@google.com> for pointing them out.
Reviewed-by: Steve Henson <steve@openssl.org>
MR #1198
(cherry picked from commit 605236f6a8fe0743af2f63d93239a74c69dae137)
Diffstat (limited to 'crypto/asn1')
-rw-r--r-- | crypto/asn1/d2i_pr.c | 8 | ||||
-rw-r--r-- | crypto/asn1/x_x509.c | 4 |
2 files changed, 6 insertions, 6 deletions
diff --git a/crypto/asn1/d2i_pr.c b/crypto/asn1/d2i_pr.c index 314f4e38ba..d21829af19 100644 --- a/crypto/asn1/d2i_pr.c +++ b/crypto/asn1/d2i_pr.c @@ -104,7 +104,8 @@ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, EVP_PKEY_free(ret); ret = EVP_PKCS82PKEY(p8); PKCS8_PRIV_KEY_INFO_free(p8); - + if (ret == NULL) + goto err; } else { ASN1err(ASN1_F_D2I_PRIVATEKEY, ERR_R_ASN1_LIB); goto err; @@ -160,8 +161,9 @@ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, } ret = EVP_PKCS82PKEY(p8); PKCS8_PRIV_KEY_INFO_free(p8); - if (ret != NULL) - *pp = p; + if (ret == NULL) + return NULL; + *pp = p; if (a) { *a = ret; } diff --git a/crypto/asn1/x_x509.c b/crypto/asn1/x_x509.c index 63c15e8830..e2cac83694 100644 --- a/crypto/asn1/x_x509.c +++ b/crypto/asn1/x_x509.c @@ -186,9 +186,7 @@ X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length) return NULL; /* update length */ length -= q - *pp; - if (!length) - return ret; - if (!d2i_X509_CERT_AUX(&ret->aux, &q, length)) + if (length > 0 && !d2i_X509_CERT_AUX(&ret->aux, &q, length)) goto err; *pp = q; return ret; |