diff --git a/src/backend/regex/regc_color.c b/src/backend/regex/regc_color.c index 1c60566fbf57458a1f43a4116432e0636ebcd92d..e6aa899518fc36beb3f6a9ca78fe161958b4cfcc 100644 --- a/src/backend/regex/regc_color.c +++ b/src/backend/regex/regc_color.c @@ -247,7 +247,15 @@ newcolor(struct colormap * cm) /* oops, must allocate more */ struct colordesc *newCd; + if (cm->max == MAX_COLOR) + { + CERR(REG_ECOLORS); + return COLORLESS; /* too many colors */ + } + n = cm->ncds * 2; + if (n > MAX_COLOR + 1) + n = MAX_COLOR + 1; if (cm->cd == cm->cdspace) { newCd = (struct colordesc *) MALLOC(n * sizeof(struct colordesc)); diff --git a/src/include/regex/regerrs.h b/src/include/regex/regerrs.h index a761371e5d716a15e1cf112b2403d47327b749de..f02711ee1762604dee60ce2b99a3858dded91ccf 100644 --- a/src/include/regex/regerrs.h +++ b/src/include/regex/regerrs.h @@ -77,3 +77,7 @@ { REG_ETOOBIG, "REG_ETOOBIG", "nfa has too many states" }, + +{ + REG_ECOLORS, "REG_ECOLORS", "too many colors" +}, diff --git a/src/include/regex/regex.h b/src/include/regex/regex.h index 616c2c6450d80443361ca7e4660f52aaa266c9ad..3e87dff17b27f6c622a9e9278a64ea7a2bc8abad 100644 --- a/src/include/regex/regex.h +++ b/src/include/regex/regex.h @@ -153,6 +153,7 @@ typedef struct #define REG_MIXED 17 /* character widths of regex and string differ */ #define REG_BADOPT 18 /* invalid embedded option */ #define REG_ETOOBIG 19 /* nfa has too many states */ +#define REG_ECOLORS 20 /* too many colors */ /* two specials for debugging and testing */ #define REG_ATOI 101 /* convert error-code name to number */ #define REG_ITOA 102 /* convert error-code number to name */ diff --git a/src/include/regex/regguts.h b/src/include/regex/regguts.h index e1e406f4eaa77720d88938cf150348ce903f88d8..4e04abfa6f295ea235eeb8cbae61d1e9240ecde0 100644 --- a/src/include/regex/regguts.h +++ b/src/include/regex/regguts.h @@ -148,6 +148,7 @@ typedef short color; /* colors of characters */ typedef int pcolor; /* what color promotes to */ +#define MAX_COLOR 32767 /* max color (must fit in 'color' datatype) */ #define COLORLESS (-1) /* impossible color */ #define WHITE 0 /* default color, parent of all others */