diff options
author | Jan Wieck <JanWieck@Yahoo.com> | 2001-06-06 18:54:41 +0000 |
---|---|---|
committer | Jan Wieck <JanWieck@Yahoo.com> | 2001-06-06 18:54:41 +0000 |
commit | ce62c8b10eea517baf47d6b895c5f47392bf1dd2 (patch) | |
tree | e0845e1354b41dc79411286ccba78cfa55935c8d /src | |
parent | 1173344e74f7b0eccb9bf3ad2307c82e12cb4fd8 (diff) | |
download | postgresql-ce62c8b10eea517baf47d6b895c5f47392bf1dd2.tar.gz postgresql-ce62c8b10eea517baf47d6b895c5f47392bf1dd2.zip |
Patch from Ian Lance Taylor fixing multiple cursor arguments
and buffer zero termination.
Jan
Diffstat (limited to 'src')
-rw-r--r-- | src/pl/plpgsql/src/gram.y | 22 |
1 files 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 { |