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