From ce62c8b10eea517baf47d6b895c5f47392bf1dd2 Mon Sep 17 00:00:00 2001
From: Jan Wieck <JanWieck@Yahoo.com>
Date: Wed, 6 Jun 2001 18:54:41 +0000
Subject: [PATCH] Patch from Ian Lance Taylor fixing multiple cursor arguments
 and buffer zero termination.

Jan
---
 src/pl/plpgsql/src/gram.y | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y
index 0bec5a8f2cf..14f32c278fe 100644
--- a/src/pl/plpgsql/src/gram.y
+++ b/src/pl/plpgsql/src/gram.y
@@ -4,7 +4,7 @@
  *						  procedural language
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.20 2001/05/31 17:15:40 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.21 2001/06/06 18:54:41 wieck Exp $
  *
  *	  This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -385,7 +385,8 @@ decl_statement	: decl_varname decl_const decl_datatype decl_notnull decl_defval
 								*cp2++ = '\\';
 							*cp2++ = *cp1++;
 						}
-						strcat(buf, "'");
+						*cp2++ = '\'';
+						*cp2 = '\0';
 						curname_def->query = strdup(buf);
 						new->default_val = curname_def;
 
@@ -1404,6 +1405,8 @@ stmt_open		: K_OPEN lno cursor_varptr
 						{
 							if ($3->cursor_explicit_argrow >= 0)
 							{
+								char   *cp;
+
 								tok = yylex();
 
 								if (tok != '(')
@@ -1412,7 +1415,20 @@ stmt_open		: K_OPEN lno cursor_varptr
 									elog(ERROR, "cursor %s has arguments", $3->refname);
 								}
 
-								new->argquery = read_sqlstmt(';', ";", "SELECT (");
+								new->argquery = read_sqlstmt(';', ";", "SELECT ");
+								/* Remove the trailing right paren,
+                                 * because we want "select 1, 2", not
+                                 * "select (1, 2)".
+								 */
+								cp = new->argquery->query;
+								cp += strlen(cp);
+								--cp;
+								if (*cp != ')')
+								{
+									plpgsql_comperrinfo();
+									elog(ERROR, "missing )");
+								}
+								*cp = '\0';
 							}
 							else
 							{
-- 
GitLab