aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/test/isolation/specscanner.l19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/test/isolation/specscanner.l b/src/test/isolation/specscanner.l
index 481b32d1d77..f97f4027f2f 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);
@@ -41,6 +43,11 @@ comment ("#"{non_newline}*)
%%
+%{
+ litbuf = pg_malloc(LITBUF_INIT);
+ litbufsize = LITBUF_INIT;
+%}
+
permutation { return PERMUTATION; }
session { return SESSION; }
setup { return SETUP; }
@@ -100,10 +107,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;
}