diff options
author | David Benjamin <davidben@chromium.org> | 2014-07-25 11:58:53 +0400 |
---|---|---|
committer | Adam Langley <agl@google.com> | 2014-07-30 04:34:55 +0400 |
commit | 61b66ffcc29f28900db4b037865a2206eb62242e (patch) | |
tree | e81bc8bca59cfcceb475ce170aa5cb71045e11c6 /crypto/x509 | |
parent | 59b3a728dc2dd63bf68dad7863e51c72b1be5441 (diff) |
Fix error-handling bugs.
Caught by clang scan-build.
Change-Id: I133d0338fe38172d687c02099d909366a59ee95b
Reviewed-on: https://boringssl-review.googlesource.com/1343
Reviewed-by: Adam Langley <agl@google.com>
Diffstat (limited to 'crypto/x509')
-rw-r--r-- | crypto/x509/x509_lu.c | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/crypto/x509/x509_lu.c b/crypto/x509/x509_lu.c index 3cf2d816..63b81c37 100644 --- a/crypto/x509/x509_lu.c +++ b/crypto/x509/x509_lu.c @@ -181,34 +181,31 @@ X509_STORE *X509_STORE_new(void) if ((ret=(X509_STORE *)OPENSSL_malloc(sizeof(X509_STORE))) == NULL) return NULL; + memset(ret, 0, sizeof(*ret)); ret->objs = sk_X509_OBJECT_new(x509_object_cmp); - ret->cache=1; - ret->get_cert_methods=sk_X509_LOOKUP_new_null(); - ret->verify=0; - ret->verify_cb=0; + ret->cache = 1; + ret->get_cert_methods = sk_X509_LOOKUP_new_null(); if ((ret->param = X509_VERIFY_PARAM_new()) == NULL) - return NULL; - - ret->get_issuer = 0; - ret->check_issued = 0; - ret->check_revocation = 0; - ret->get_crl = 0; - ret->check_crl = 0; - ret->cert_crl = 0; - ret->lookup_certs = 0; - ret->lookup_crls = 0; - ret->cleanup = 0; + goto err; if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_X509_STORE, ret, &ret->ex_data)) + goto err; + + ret->references = 1; + return ret; +err: + if (ret) { - sk_X509_OBJECT_free(ret->objs); + if (ret->param) + X509_VERIFY_PARAM_free(ret->param); + if (ret->get_cert_methods) + sk_X509_LOOKUP_free(ret->get_cert_methods); + if (ret->objs) + sk_X509_OBJECT_free(ret->objs); OPENSSL_free(ret); - return NULL; } - - ret->references=1; - return ret; + return NULL; } static void cleanup(X509_OBJECT *a) |