From 972e20b429dd222745ac6ba3269a44b2a7a574ff Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Thu, 29 Mar 2007 19:10:10 +0000 Subject: [PATCH] exec_parse_message neglected to copy parameter type array into the required memory context when handling client-specified parameter types for an unnamed statement. Per report from Kris Jurka. --- src/backend/tcop/postgres.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 9f55ba2e387..bfcc271996e 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.529 2007/03/22 19:55:04 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.530 2007/03/29 19:10:10 tgl Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -1239,12 +1239,24 @@ exec_parse_message(const char *query_string, /* string to execute */ } else { - /* query_string needs to be copied into unnamed_stmt_context */ - /* the rest is there already */ + /* + * paramTypes and query_string need to be copied into + * unnamed_stmt_context. The rest is there already + */ + Oid *newParamTypes; + + if (numParams > 0) + { + newParamTypes = (Oid *) palloc(numParams * sizeof(Oid)); + memcpy(newParamTypes, paramTypes, numParams * sizeof(Oid)); + } + else + newParamTypes = NULL; + unnamed_stmt_psrc = FastCreateCachedPlan(raw_parse_tree, pstrdup(query_string), commandTag, - paramTypes, + newParamTypes, numParams, stmt_list, fully_planned, -- GitLab