From 911f4d93d436a9067fb45168f70f79b5916489b0 Mon Sep 17 00:00:00 2001 From: Valentine Krasnobaeva Date: Mon, 12 Aug 2024 19:21:00 +0200 Subject: [PATCH] BUG/MINOR: pattern: pat_ref_set: return 0 if err was found pat_ref_set_elt() returns 0, if we are run out of memory or can't parse a new map value. Any arror message emitted by pat_ref_set_elt() is saved in err buffer, if its provided by caller. These error messages are cumulated during the loop. pat_ref_set() is used to update values in map, referred to the same given key. If during the update pat_ref_set_elt() fails, let's retun 0 to caller immediately. We have the same non-unique key and the same new value in each loop. So it seems quite odd to cumulate the same error messages and print it in CLI: > add map @1 mytest.map << + 1.0.1.11 TestA + 1.0.1.11 TESTA + 1.0.1.11 test_a + > set map mytest.map 1.0.1.11 15 unable to parse '15' unable to parse '15' unable to parse '15'. cli_parse_set_map(), which calls pat_ref_set() to update map, will return only one error message with this patch: > set map mytest.map 1.0.1.11 15 unable to parse '15'. hlua_set_map() and http_action_set_map() don't provide error buffer and will just exit on the first error. This should be backported in all stable versions. --- src/pattern.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pattern.c b/src/pattern.c index da81e1751..90f386e9a 100644 --- a/src/pattern.c +++ b/src/pattern.c @@ -1792,6 +1792,7 @@ int pat_ref_set(struct pat_ref *ref, const char *key, const char *value, char ** if (!pat_ref_set_elt(ref, elt, value, &tmp_err)) { memprintf(err, "%s, %s", err && *err ? *err : "", tmp_err); ha_free(&tmp_err); + return 0; } found = 1; }