diff options
Diffstat (limited to 'src/lib/libcrypto/x509v3/v3_cpols.c')
-rw-r--r-- | src/lib/libcrypto/x509v3/v3_cpols.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_cpols.c b/src/lib/libcrypto/x509v3/v3_cpols.c index 0d554f3a2c..867525f336 100644 --- a/src/lib/libcrypto/x509v3/v3_cpols.c +++ b/src/lib/libcrypto/x509v3/v3_cpols.c | |||
@@ -137,7 +137,15 @@ static STACK_OF(POLICYINFO) *r2i_certpol(X509V3_EXT_METHOD *method, | |||
137 | CONF_VALUE *cnf; | 137 | CONF_VALUE *cnf; |
138 | int i, ia5org; | 138 | int i, ia5org; |
139 | pols = sk_POLICYINFO_new_null(); | 139 | pols = sk_POLICYINFO_new_null(); |
140 | if (pols == NULL) { | ||
141 | X509V3err(X509V3_F_R2I_CERTPOL, ERR_R_MALLOC_FAILURE); | ||
142 | return NULL; | ||
143 | } | ||
140 | vals = X509V3_parse_list(value); | 144 | vals = X509V3_parse_list(value); |
145 | if (vals == NULL) { | ||
146 | X509V3err(X509V3_F_R2I_CERTPOL, ERR_R_X509V3_LIB); | ||
147 | goto err; | ||
148 | } | ||
141 | ia5org = 0; | 149 | ia5org = 0; |
142 | for(i = 0; i < sk_CONF_VALUE_num(vals); i++) { | 150 | for(i = 0; i < sk_CONF_VALUE_num(vals); i++) { |
143 | cnf = sk_CONF_VALUE_value(vals, i); | 151 | cnf = sk_CONF_VALUE_value(vals, i); |
@@ -176,6 +184,7 @@ static STACK_OF(POLICYINFO) *r2i_certpol(X509V3_EXT_METHOD *method, | |||
176 | sk_CONF_VALUE_pop_free(vals, X509V3_conf_free); | 184 | sk_CONF_VALUE_pop_free(vals, X509V3_conf_free); |
177 | return pols; | 185 | return pols; |
178 | err: | 186 | err: |
187 | sk_CONF_VALUE_pop_free(vals, X509V3_conf_free); | ||
179 | sk_POLICYINFO_pop_free(pols, POLICYINFO_free); | 188 | sk_POLICYINFO_pop_free(pols, POLICYINFO_free); |
180 | return NULL; | 189 | return NULL; |
181 | } | 190 | } |