mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-07 19:47:50 +08:00
Fix crash on compiling a regular expression with more than 32k colors.
Throw an error instead. Backpatch to all supported branches.
This commit is contained in:
parent
d7d5832012
commit
bf2b0a1478
@ -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));
|
||||
|
@ -77,3 +77,7 @@
|
||||
{
|
||||
REG_ETOOBIG, "REG_ETOOBIG", "nfa has too many states"
|
||||
},
|
||||
|
||||
{
|
||||
REG_ECOLORS, "REG_ECOLORS", "too many colors"
|
||||
},
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user