mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
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.
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.621 2008/09/01 20:42:44 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.622 2008/09/02 20:37:54 tgl Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
@@ -79,6 +79,17 @@
|
||||
*/
|
||||
#define base_yylex filtered_base_yylex
|
||||
|
||||
/*
|
||||
* 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 List *parsetree; /* final parse result is delivered here */
|
||||
|
||||
static bool QueryIsRule = FALSE;
|
||||
|
Reference in New Issue
Block a user