From 3be8b06a60a37756a2c596f36727268cbfc4edf9 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Thu, 25 Sep 2025 10:03:41 +0200 Subject: [PATCH] BUG/MINOR: pattern: Properly flag virtual maps as using samples When a map file is load, internally, the pattern reference is flagged as based on a sample. However it is not performed for virtual maps. This flag is only used during startup to check the map compatibility when it used at different places. At runtime this does not change anything. But errors can be triggered during configuration parsing. For instance, the following valid config will trigger an error: http-request set-map(virt@test) foo bar if !{ str(foo),map(virt@test) -m found } http-request set-var(txn.foo) str(foo),map(virt@test) The fix is quite obvious. PAT_REF_SMP flag must be set for virtual map as any other map. A workaround is to use optional map (opt@...) by checking the map id cannot reference an existing file. This patch must be backported as far as 3.0. --- src/pattern.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pattern.c b/src/pattern.c index 04a76d207..f01e693a5 100644 --- a/src/pattern.c +++ b/src/pattern.c @@ -2506,6 +2506,8 @@ int pattern_read_from_file(struct pattern_head *head, unsigned int refflags, return 0; } } + else if ((ref->flags & PAT_REF_ID) && load_smp) + ref->flags |= PAT_REF_SMP; } else { /* The reference already exists, check the map compatibility. */ -- 2.47.3