plpgsql EXIT construct forgot to downcase or quote-strip its identifier

argument, leading to label matching failures at run-time.  Per report from
Patrick Fiche.  Also, fix it so that an unrecognized label argument draws
a more useful error message than 'syntax error'.
This commit is contained in:
Tom Lane 2004-10-12 15:44:15 +00:00
parent 0b112045b7
commit a323bce2e7

View File

@ -4,7 +4,7 @@
* procedural language
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.62 2004/09/14 23:46:46 neilc Exp $
* $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.63 2004/10/12 15:44:15 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@ -1639,7 +1639,18 @@ opt_label :
opt_exitlabel :
{ $$ = NULL; }
| T_LABEL
{ $$ = strdup(yytext); }
{
char *name;
plpgsql_convert_ident(yytext, &name, 1);
$$ = strdup(name);
pfree(name);
}
| T_WORD
{
/* just to give a better error than "syntax error" */
yyerror("no such label");
}
;
opt_exitcond : ';'