From: Greg Hudson Date: Wed, 16 Jul 2014 20:02:21 +0000 (-0400) Subject: Fix deleted node handling in libprofile X-Git-Tag: krb5-1.12.2-final~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3ae1eaee8ae5e972cc29133684fdf878708c8b2;p=thirdparty%2Fkrb5.git Fix deleted node handling in libprofile In profile_find_node, skip deleted nodes when finding the second match. Otherwise, profile_clear_nodes could return an error if a node has some values to clear but the last one is deleted. In profile_node_iterator, skip deleted nodes when looking up the section names. Otherwise we could iterate over a deleted section and/or ignore its replacement. (cherry picked from commit e7f50a1c11845ba73ce4ffa4729d10113563a247) ticket: 7971 version_fixed: 1.12.2 status: resolved --- diff --git a/src/util/profile/prof_tree.c b/src/util/profile/prof_tree.c index cc5bdfd80b..081f688e4a 100644 --- a/src/util/profile/prof_tree.c +++ b/src/util/profile/prof_tree.c @@ -294,6 +294,8 @@ errcode_t profile_find_node(struct profile_node *section, const char *name, if (value && (strcmp(p->value, value))) continue; } + if (p->deleted) + continue; /* A match! */ break; } @@ -519,7 +521,7 @@ get_new_file: assert(section != NULL); for (cpp = iter->names; cpp[iter->done_idx]; cpp++) { for (p=section->first_child; p; p = p->next) { - if (!strcmp(p->name, *cpp) && !p->value) + if (!strcmp(p->name, *cpp) && !p->value && !p->deleted) break; } if (!p) {