summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509v3/pcy_tree.c
diff options
context:
space:
mode:
authorbeck <>2015-07-18 00:01:05 +0000
committerbeck <>2015-07-18 00:01:05 +0000
commit6f4d6461c56d882eecea37a2948d1ed154d1e4f4 (patch)
tree25db56092e900936a88d6a24c309127fb1a71f59 /src/lib/libcrypto/x509v3/pcy_tree.c
parent23be51621d39d0841038d456c00cfeba9add7c62 (diff)
downloadopenbsd-6f4d6461c56d882eecea37a2948d1ed154d1e4f4.tar.gz
openbsd-6f4d6461c56d882eecea37a2948d1ed154d1e4f4.tar.bz2
openbsd-6f4d6461c56d882eecea37a2948d1ed154d1e4f4.zip
Fix leak found by coverity, issue 78897 - which also brough to
light that the child counting was broken in the original code. this is still fugly, but this preserves all the existing goo. ok doug@
Diffstat (limited to 'src/lib/libcrypto/x509v3/pcy_tree.c')
-rw-r--r--src/lib/libcrypto/x509v3/pcy_tree.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/lib/libcrypto/x509v3/pcy_tree.c b/src/lib/libcrypto/x509v3/pcy_tree.c
index 9e54f233ad..af9bf00c66 100644
--- a/src/lib/libcrypto/x509v3/pcy_tree.c
+++ b/src/lib/libcrypto/x509v3/pcy_tree.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: pcy_tree.c,v 1.14 2015/07/15 17:02:03 miod Exp $ */ 1/* $OpenBSD: pcy_tree.c,v 1.15 2015/07/18 00:01:05 beck 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 2004. 3 * project 2004.
4 */ 4 */
@@ -233,7 +233,7 @@ tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs, unsigned int flags)
233 233
234 data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0); 234 data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0);
235 235
236 if (!data || !level_add_node(level, data, NULL, tree)) 236 if (!data || !level_add_node(level, data, NULL, tree, NULL))
237 goto bad_tree; 237 goto bad_tree;
238 238
239 for (i = n - 2; i >= 0; i--) { 239 for (i = n - 2; i >= 0; i--) {
@@ -297,13 +297,13 @@ tree_link_matching_nodes(X509_POLICY_LEVEL *curr, const X509_POLICY_DATA *data)
297 for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++) { 297 for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++) {
298 node = sk_X509_POLICY_NODE_value(last->nodes, i); 298 node = sk_X509_POLICY_NODE_value(last->nodes, i);
299 if (policy_node_match(last, node, data->valid_policy)) { 299 if (policy_node_match(last, node, data->valid_policy)) {
300 if (!level_add_node(curr, data, node, NULL)) 300 if (!level_add_node(curr, data, node, NULL, NULL))
301 return 0; 301 return 0;
302 matched = 1; 302 matched = 1;
303 } 303 }
304 } 304 }
305 if (!matched && last->anyPolicy) { 305 if (!matched && last->anyPolicy) {
306 if (!level_add_node(curr, data, last->anyPolicy, NULL)) 306 if (!level_add_node(curr, data, last->anyPolicy, NULL, NULL))
307 return 0; 307 return 0;
308 } 308 }
309 return 1; 309 return 1;
@@ -352,7 +352,7 @@ tree_add_unmatched(X509_POLICY_LEVEL *curr, const X509_POLICY_CACHE *cache,
352 /* Curr may not have anyPolicy */ 352 /* Curr may not have anyPolicy */
353 data->qualifier_set = cache->anyPolicy->qualifier_set; 353 data->qualifier_set = cache->anyPolicy->qualifier_set;
354 data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS; 354 data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
355 if (!level_add_node(curr, data, node, tree)) { 355 if (!level_add_node(curr, data, node, tree, NULL)) {
356 policy_data_free(data); 356 policy_data_free(data);
357 return 0; 357 return 0;
358 } 358 }
@@ -410,7 +410,7 @@ tree_link_any(X509_POLICY_LEVEL *curr, const X509_POLICY_CACHE *cache,
410 /* Finally add link to anyPolicy */ 410 /* Finally add link to anyPolicy */
411 if (last->anyPolicy) { 411 if (last->anyPolicy) {
412 if (!level_add_node(curr, cache->anyPolicy, 412 if (!level_add_node(curr, cache->anyPolicy,
413 last->anyPolicy, NULL)) 413 last->anyPolicy, NULL, NULL))
414 return 0; 414 return 0;
415 } 415 }
416 return 1; 416 return 1;
@@ -581,8 +581,8 @@ tree_calculate_user_set(X509_POLICY_TREE *tree,
581 extra->qualifier_set = anyPolicy->data->qualifier_set; 581 extra->qualifier_set = anyPolicy->data->qualifier_set;
582 extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS | 582 extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS |
583 POLICY_DATA_FLAG_EXTRA_NODE; 583 POLICY_DATA_FLAG_EXTRA_NODE;
584 node = level_add_node(NULL, extra, anyPolicy->parent, 584 (void) level_add_node(NULL, extra, anyPolicy->parent,
585 tree); 585 tree, &node);
586 } 586 }
587 if (!tree->user_policies) { 587 if (!tree->user_policies) {
588 tree->user_policies = sk_X509_POLICY_NODE_new_null(); 588 tree->user_policies = sk_X509_POLICY_NODE_new_null();