summaryrefslogtreecommitdiff
path: root/contrib/cube
diff options
context:
space:
mode:
authorTom Lane2008-09-02 20:37:55 +0000
committerTom Lane2008-09-02 20:37:55 +0000
commitfbb2b69c8f478c2910a32e25d80eaf67d0dd3cbf (patch)
treeb1533d094abd1c506210616b6b77d50cf8b8c812 /contrib/cube
parentdd6edd5efd042f7aaaccb7606fb5f477c9dc9888 (diff)
Prevent memory leaks in our various bison parsers when an error occurs
during parsing. Formerly the parser's stack was allocated with malloc and so wouldn't be reclaimed; this patch makes it use palloc instead, so that flushing the current context will reclaim the memory. Per Marko Kreen.
Diffstat (limited to 'contrib/cube')
-rw-r--r--contrib/cube/cubeparse.y13
1 files changed, 12 insertions, 1 deletions
diff --git a/contrib/cube/cubeparse.y b/contrib/cube/cubeparse.y
index e867dc8731a..eefe5c47b99 100644
--- a/contrib/cube/cubeparse.y
+++ b/contrib/cube/cubeparse.y
@@ -2,7 +2,7 @@
/* NdBox = [(lowerleft),(upperright)] */
/* [(xLL(1)...xLL(N)),(xUR(1)...xUR(n))] */
-/* $PostgreSQL: pgsql/contrib/cube/cubeparse.y,v 1.17 2007/02/27 23:48:05 tgl Exp $ */
+/* $PostgreSQL: pgsql/contrib/cube/cubeparse.y,v 1.18 2008/09/02 20:37:54 tgl Exp $ */
#define YYPARSE_PARAM result /* need this to pass a pointer (void *) to yyparse */
#define YYSTYPE char *
@@ -12,6 +12,17 @@
#include "cubedata.h"
+/*
+ * Bison doesn't allocate anything that needs to live across parser calls,
+ * so we can easily have it use palloc instead of malloc. This prevents
+ * memory leaks if we error out during parsing. Note this only works with
+ * bison >= 2.0. However, in bison 1.875 the default is to use alloca()
+ * if possible, so there's not really much problem anyhow, at least if
+ * you're building with gcc.
+ */
+#define YYMALLOC palloc
+#define YYFREE pfree
+
extern int cube_yylex(void);
static char *scanbuf;