From e459eb9fb0c2af5c1363327df7ed0db3ab0042d2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 28 Feb 2018 16:57:38 -0500 Subject: [PATCH] Remove restriction on SQL block length in isolationtester scanner. specscanner.l had a fixed limit of 1024 bytes on the length of individual SQL stanzas in an isolation test script. People are starting to run into that, so fix it by making the buffer resizable. Once we allow this in HEAD, it seems inevitable that somebody will try to back-patch a test that exceeds the old limit, so back-patch this change as a preventive measure. Daniel Gustafsson Discussion: https://postgr.es/m/8D628BE4-6606-4FF6-A3FF-8B2B0E9B43D0@yesql.se --- src/test/isolation/specscanner.l | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/test/isolation/specscanner.l b/src/test/isolation/specscanner.l index df592369e59..25554c27edd 100644 --- a/src/test/isolation/specscanner.l +++ b/src/test/isolation/specscanner.l @@ -12,8 +12,10 @@ static int yyline = 1; /* line number for error reporting */ -static char litbuf[1024]; -static int litbufpos = 0; +#define LITBUF_INIT 1024 /* initial size of litbuf */ +static char *litbuf = NULL; +static size_t litbufsize = 0; +static size_t litbufpos = 0; static void addlitchar(char c); @@ -39,6 +41,11 @@ comment ("#"{non_newline}*) %% +%{ + litbuf = pg_malloc(LITBUF_INIT); + litbufsize = LITBUF_INIT; +%} + permutation { return(PERMUTATION); } session { return(SESSION); } setup { return(SETUP); } @@ -96,10 +103,12 @@ teardown { return(TEARDOWN); } static void addlitchar(char c) { - if (litbufpos >= sizeof(litbuf) - 1) + /* We must always leave room to add a trailing \0 */ + if (litbufpos >= litbufsize - 1) { - fprintf(stderr, "SQL step too long\n"); - exit(1); + /* Double the size of litbuf if it gets full */ + litbufsize += litbufsize; + litbuf = pg_realloc(litbuf, litbufsize); } litbuf[litbufpos++] = c; }