From d862dd97e76b4cec256f90999b049edb6e5bc958 Mon Sep 17 00:00:00 2001 From: Daniel Gustafsson Date: Wed, 21 Feb 2018 20:42:24 +0100 Subject: [PATCH] Grow isolation spec scanner buffer on large SQL steps The previous value of 1024 characters for the line buffer is quite easy to bump into with large setup blocks. In case the SQL step is larger than the current limit of 1024 chars, reallocate the buffer until we hit an upper limit of LITBUF_MAX. --- src/test/isolation/specscanner.l | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/test/isolation/specscanner.l b/src/test/isolation/specscanner.l index 481b32d1d7..6e8e4a6ff0 100644 --- a/src/test/isolation/specscanner.l +++ b/src/test/isolation/specscanner.l @@ -12,7 +12,11 @@ static int yyline = 1; /* line number for error reporting */ -static char litbuf[1024]; +#define LITBUF_MAX 1024 * 1024 * 10 +#define LITBUF_INIT 1024 + +static size_t litbufsize; +static char *litbuf = NULL; static int litbufpos = 0; static void addlitchar(char c); @@ -40,6 +44,10 @@ space [ \t\r\f] comment ("#"{non_newline}*) %% +%{ + litbuf = pg_malloc(LITBUF_INIT); + litbufsize = LITBUF_INIT; +%} permutation { return PERMUTATION; } session { return SESSION; } @@ -100,10 +108,15 @@ teardown { return TEARDOWN; } static void addlitchar(char c) { - if (litbufpos >= sizeof(litbuf) - 1) + if (litbufpos >= litbufsize - 1) { - fprintf(stderr, "SQL step too long\n"); - exit(1); + litbufsize += litbufsize; + if (litbufsize > LITBUF_MAX) + { + fprintf(stderr, "SQL step too long\n"); + exit(1); + } + litbuf = pg_realloc(litbuf, litbufsize); } litbuf[litbufpos++] = c; } -- 2.14.1.145.gb3622a4ee