From 3db05e76f92846d4b54d7de251b0875cf1e23aa4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 23 Feb 2021 13:55:11 -0500 Subject: [PATCH] Suppress compiler warning in new regex match-all detection code. gcc 10 is smart enough to notice that control could reach this "hasmatch[depth]" assignment with depth < 0, but not smart enough to know that that would require a badly broken NFA graph. Change the assert() to a plain runtime test to shut it up. Per report from Andres Freund. Discussion: https://postgr.es/m/20210223173437.b3ywijygsy6q42gq@alap3.anarazel.de --- src/backend/regex/regc_nfa.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backend/regex/regc_nfa.c b/src/backend/regex/regc_nfa.c index 1a6c9ce183..69929eddfc 100644 --- a/src/backend/regex/regc_nfa.c +++ b/src/backend/regex/regc_nfa.c @@ -3082,8 +3082,13 @@ checkmatchall_recurse(struct nfa *nfa, struct state *s, { /* We found an all-RAINBOW path to the post state */ result = true; + /* ... which should not be adjacent to the pre state */ + if (depth < 0) + { + NERR(REG_ASSERT); + return false; + } /* Record potential match lengths */ - assert(depth >= 0); hasmatch[depth] = true; if (foundloop) {