diff options
author | Jonas Maebe <jonas.maebe@elis.ugent.be> | 2013-12-03 17:10:12 +0100 |
---|---|---|
committer | Kurt Roeckx <kurt@roeckx.be> | 2014-08-15 22:36:54 +0200 |
commit | 15297d962ca3ed40af689cd4c53fbf76cda2f12f (patch) | |
tree | ea7e09bdfc25535b7b168b83ad7022609fa00eaf /crypto/asn1 | |
parent | c9c63b0180f658561f16afeb64e88d125d0ab4ca (diff) | |
download | openssl-new-15297d962ca3ed40af689cd4c53fbf76cda2f12f.tar.gz |
mime_hdr_new: free mhdr, tmpname, tmpval on error path
Signed-off-by: Kurt Roeckx <kurt@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'crypto/asn1')
-rw-r--r-- | crypto/asn1/asn_mime.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/crypto/asn1/asn_mime.c b/crypto/asn1/asn_mime.c index 116c3e7c60..cb98944ef5 100644 --- a/crypto/asn1/asn_mime.c +++ b/crypto/asn1/asn_mime.c @@ -817,8 +817,8 @@ static char *strip_end(char *name) static MIME_HEADER *mime_hdr_new(char *name, char *value) { - MIME_HEADER *mhdr; - char *tmpname, *tmpval, *p; + MIME_HEADER *mhdr = NULL; + char *tmpname = NULL, *tmpval = NULL, *p; int c; if(name) { if(!(tmpname = BUF_strdup(name))) return NULL; @@ -829,9 +829,10 @@ static MIME_HEADER *mime_hdr_new(char *name, char *value) *p = c; } } - } else tmpname = NULL; + } if(value) { - if(!(tmpval = BUF_strdup(value))) return NULL; + if(!(tmpval = BUF_strdup(value))) + goto err; for(p = tmpval ; *p; p++) { c = (unsigned char)*p; if(isupper(c)) { @@ -839,13 +840,23 @@ static MIME_HEADER *mime_hdr_new(char *name, char *value) *p = c; } } - } else tmpval = NULL; + } mhdr = (MIME_HEADER *) OPENSSL_malloc(sizeof(MIME_HEADER)); - if(!mhdr) return NULL; + if(!mhdr) goto err; mhdr->name = tmpname; mhdr->value = tmpval; - if(!(mhdr->params = sk_MIME_PARAM_new(mime_param_cmp))) return NULL; + if(!(mhdr->params = sk_MIME_PARAM_new(mime_param_cmp))) + goto err; return mhdr; + + err: + if (tmpname != NULL) + OPENSSL_free(tmpname); + if (tmpval != NULL) + OPENSSL_free(tmpval); + if (mhdr != NULL) + OPENSSL_free(mhdr); + return NULL; } static int mime_hdr_addparam(MIME_HEADER *mhdr, char *name, char *value) |