]> granicus.if.org Git - postgresql/commitdiff
Remove restriction on SQL block length in isolationtester scanner.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Feb 2018 21:57:37 +0000 (16:57 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Feb 2018 21:57:37 +0000 (16:57 -0500)
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

index aed9269c63b5eec8c7498f415c0e63935cb6ed81..1b56d86d2e222a9dac2ed0a1db52d2968ef293f3 100644 (file)
 
 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;
 }