postgres.git / summary / log / commit / refs
commit 3db05e76f92846d4b54d7de251b0875cf1e23aa4
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Tue Feb 23 18:55:11 2021 +0000
First released in: 14.0
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 1a6c9ce1838..69929eddfcc 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)
{
[parent: d9d076222f5b]