mirror of
https://github.com/haproxy/haproxy.git
synced 2026-02-20 00:10:41 -05:00
Revert "BUG/MEDIUM: pattern: fix possible infinite loops on deletion"
This reverts commit 359a829ccb.
The fix is neither sufficient nor correct (it triggers ASAN). Better
redo it cleanly rather than accumulate invalid fixes.
This commit is contained in:
parent
6b6c03bc0d
commit
f1b1d3682a
1 changed files with 6 additions and 5 deletions
|
|
@ -1626,16 +1626,18 @@ int pat_ref_delete_by_id(struct pat_ref *ref, struct pat_ref_elt *refelt)
|
|||
*/
|
||||
int pat_ref_gen_delete(struct pat_ref *ref, unsigned int gen_id, const char *key)
|
||||
{
|
||||
struct pat_ref_elt *elt;
|
||||
struct pat_ref_elt *elt, *next;
|
||||
int found = 0;
|
||||
|
||||
/* delete pattern from reference */
|
||||
for (elt = cebs_item_lookup(&ref->ceb_root, node, pattern, key, struct pat_ref_elt);
|
||||
elt; elt = cebs_item_next_dup(&ref->ceb_root, node, pattern, elt)) {
|
||||
elt = cebs_item_lookup(&ref->ceb_root, node, pattern, key, struct pat_ref_elt);
|
||||
while (elt) {
|
||||
if (elt->gen_id != gen_id)
|
||||
continue;
|
||||
next = cebs_item_next_dup(&ref->ceb_root, node, pattern, elt);
|
||||
pat_ref_delete_by_ptr(ref, elt);
|
||||
found = 1;
|
||||
elt = next;
|
||||
}
|
||||
|
||||
if (found)
|
||||
|
|
@ -1795,7 +1797,7 @@ static int pat_ref_set_from_elt(struct pat_ref *ref, struct pat_ref_elt *elt, co
|
|||
gen = elt->gen_id;
|
||||
else if (elt->gen_id != gen) {
|
||||
/* only consider duplicate elements from the same gen! */
|
||||
goto skip;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!pat_ref_set_elt(ref, elt, value, &tmp_err)) {
|
||||
|
|
@ -1807,7 +1809,6 @@ static int pat_ref_set_from_elt(struct pat_ref *ref, struct pat_ref_elt *elt, co
|
|||
}
|
||||
found = 1;
|
||||
first = 0;
|
||||
skip:
|
||||
elt = cebs_item_next_dup(&ref->ceb_root, node, pattern, elt);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue