]> granicus.if.org Git - postgresql/commitdiff
Fix broken definition for function name in pgbench's exprscan.l.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 7 Mar 2016 02:04:25 +0000 (21:04 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 7 Mar 2016 02:04:25 +0000 (21:04 -0500)
As written, this would accept e.g. 123e9 as a function name.  Aside
from being mildly astonishing, that would come back to haunt us if
we ever try to add float constants to the expression syntax.  Insist
that function names start with letters (or at least non-digits).

In passing reset yyline as well as yycol when starting a new expression.
This variable is useless since it's used nowhere, but if we're going
to have it we should have it act sanely.

src/bin/pgbench/exprscan.l

index df673f09f203bcc707cb940abca8dd1e9fdc2186..cb51a98fd6b4be3551fee054f13027436a24c53f 100644 (file)
@@ -35,6 +35,9 @@ static int expr_col = 0;
 %option warn
 %option prefix="expr_yy"
 
+alpha                  [a-zA-Z_]
+digit                  [0-9]
+alnum                  [a-zA-Z0-9_]
 space                  [ \t\r\f]
 
 %%
@@ -48,17 +51,17 @@ space                       [ \t\r\f]
 ")"                            { yycol += yyleng; return ')'; }
 ","                            { yycol += yyleng; return ','; }
 
-:[a-zA-Z0-9_]+ {
+:{alnum}+              {
                                        yycol += yyleng;
                                        yylval.str = pg_strdup(yytext + 1);
                                        return VARIABLE;
                                }
-[0-9]+                 {
+{digit}+               {
                                        yycol += yyleng;
                                        yylval.ival = strtoint64(yytext);
                                        return INTEGER;
                                }
-[a-zA-Z0-9_]+   {
+{alpha}{alnum}+        {
                                        yycol += yyleng;
                                        yylval.str = pg_strdup(yytext);
                                        return FUNCTION;
@@ -107,8 +110,8 @@ expr_scanner_init(const char *str, const char *source,
        expr_command = (char *) cmd;
        expr_col = (int) ecol;
 
-       /* reset column count for this scan */
-       yycol = 0;
+       /* reset error pointers for this scan */
+       yycol = yyline = 0;
 
        /*
         * Might be left over after error