summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2019-04-22 17:32:09 +0000
committertb <>2019-04-22 17:32:09 +0000
commit3e2a6ad9043599871270c10ce91ea7ef6387184b (patch)
treeb9c2ccc3164e8528fddc57f77ca3a4c1e1c8950d /src
parent307a924ed8f794bf3663e46968cdd7e0eabfd943 (diff)
downloadopenbsd-3e2a6ad9043599871270c10ce91ea7ef6387184b.tar.gz
openbsd-3e2a6ad9043599871270c10ce91ea7ef6387184b.tar.bz2
openbsd-3e2a6ad9043599871270c10ce91ea7ef6387184b.zip
Add error checking to i2v_POLICY_MAPPINGS().
ok jsing
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/x509v3/v3_pmaps.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_pmaps.c b/src/lib/libcrypto/x509v3/v3_pmaps.c
index 32ef6be866..b10dfda072 100644
--- a/src/lib/libcrypto/x509v3/v3_pmaps.c
+++ b/src/lib/libcrypto/x509v3/v3_pmaps.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: v3_pmaps.c,v 1.11 2017/01/29 17:49:23 beck Exp $ */ 1/* $OpenBSD: v3_pmaps.c,v 1.12 2019/04/22 17:32:09 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project. 3 * project.
4 */ 4 */
@@ -146,21 +146,38 @@ POLICY_MAPPING_free(POLICY_MAPPING *a)
146 146
147static STACK_OF(CONF_VALUE) * 147static STACK_OF(CONF_VALUE) *
148i2v_POLICY_MAPPINGS(const X509V3_EXT_METHOD *method, void *a, 148i2v_POLICY_MAPPINGS(const X509V3_EXT_METHOD *method, void *a,
149 STACK_OF(CONF_VALUE) *ext_list) 149 STACK_OF(CONF_VALUE) *extlist)
150{ 150{
151 STACK_OF(CONF_VALUE) *free_extlist;
151 POLICY_MAPPINGS *pmaps = a; 152 POLICY_MAPPINGS *pmaps = a;
152 POLICY_MAPPING *pmap; 153 POLICY_MAPPING *pmap;
154 char issuer[80], subject[80];
153 int i; 155 int i;
154 char obj_tmp1[80]; 156
155 char obj_tmp2[80]; 157 if (extlist == NULL) {
158 if ((free_extlist = extlist = sk_CONF_VALUE_new_null()) == NULL)
159 return NULL;
160 }
156 161
157 for (i = 0; i < sk_POLICY_MAPPING_num(pmaps); i++) { 162 for (i = 0; i < sk_POLICY_MAPPING_num(pmaps); i++) {
158 pmap = sk_POLICY_MAPPING_value(pmaps, i); 163 if ((pmap = sk_POLICY_MAPPING_value(pmaps, i)) == NULL)
159 i2t_ASN1_OBJECT(obj_tmp1, 80, pmap->issuerDomainPolicy); 164 goto err;
160 i2t_ASN1_OBJECT(obj_tmp2, 80, pmap->subjectDomainPolicy); 165 if (!i2t_ASN1_OBJECT(issuer, sizeof issuer,
161 X509V3_add_value(obj_tmp1, obj_tmp2, &ext_list); 166 pmap->issuerDomainPolicy))
167 goto err;
168 if (!i2t_ASN1_OBJECT(subject, sizeof subject,
169 pmap->subjectDomainPolicy))
170 goto err;
171 if (!X509V3_add_value(issuer, subject, &extlist))
172 goto err;
162 } 173 }
163 return ext_list; 174
175 return extlist;
176
177 err:
178 sk_CONF_VALUE_pop_free(free_extlist, X509V3_conf_free);
179
180 return NULL;
164} 181}
165 182
166static void * 183static void *