aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/pg_trgm/trgm_regexp.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/contrib/pg_trgm/trgm_regexp.c b/contrib/pg_trgm/trgm_regexp.c
index fcf03de32dc..bf1dea6352e 100644
--- a/contrib/pg_trgm/trgm_regexp.c
+++ b/contrib/pg_trgm/trgm_regexp.c
@@ -1220,7 +1220,7 @@ addArcs(TrgmNFA *trgmNFA, TrgmState *state)
for (i = 0; i < arcsCount; i++)
{
regex_arc_t *arc = &arcs[i];
- TrgmColorInfo *colorInfo = &trgmNFA->colorInfo[arc->co];
+ TrgmColorInfo *colorInfo;
/*
* Ignore non-expandable colors; addKey already handled the case.
@@ -1228,8 +1228,14 @@ addArcs(TrgmNFA *trgmNFA, TrgmState *state)
* We need no special check for WHITE or begin/end pseudocolors
* here. We don't need to do any processing for them, and they
* will be marked non-expandable since the regex engine will have
- * reported them that way.
+ * reported them that way. We do have to watch out for RAINBOW,
+ * which has a negative color number.
*/
+ if (arc->co < 0)
+ continue;
+ Assert(arc->co < trgmNFA->ncolors);
+
+ colorInfo = &trgmNFA->colorInfo[arc->co];
if (!colorInfo->expandable)
continue;