]> granicus.if.org Git - postgresql/commitdiff
Fix handling of pgbench's hash when no argument is provided
authorMichael Paquier <michael@paquier.xyz>
Fri, 27 Jul 2018 04:40:24 +0000 (13:40 +0900)
committerMichael Paquier <michael@paquier.xyz>
Fri, 27 Jul 2018 04:40:24 +0000 (13:40 +0900)
Depending on the platform used, this can cause a crash in the worst
case, or an unhelpful error message, so fail gracefully.

Author: Fabien Coelho
Discussion: https://postgr.es/m/alpine.DEB.2.21.1807262302550.29874@lancre
Backpatch: 11-, where hash() has been added in pgbench.

src/bin/pgbench/exprparse.y
src/bin/pgbench/t/002_pgbench_no_server.pl

index 66288632d118d5469fcf0e24ec9e408ef61a2488..f7c56cc6a31f0e5c5067626c73ff5de6a88902e6 100644 (file)
@@ -467,7 +467,7 @@ make_func(yyscan_t yyscanner, int fnumber, PgBenchExprList *args)
 
                /* hash functions with optional seed argument */
                case PGBENCH_NARGS_HASH:
-                       if (len > 2)
+                       if (len < 1 || len > 2)
                                expr_yyerror_more(yyscanner, "unexpected number of arguments",
                                                                  PGBENCH_FUNCTIONS[fnumber].fname);
 
index a2845a583bddd2261ef765b921c637b5f6e21d3c..c1c2c1e3d4a7086c5fe200f4ef98369455af67db 100644 (file)
@@ -270,6 +270,26 @@ my @script_tests = (
                'endif syntax error',
                [qr{unexpected argument in command "endif"}],
                { 'endif-bad.sql' => "\\if 0\n\\endif BAD\n" }
+       ],
+       [
+               'not enough arguments for least',
+               [qr{at least one argument expected \(least\)}],
+               { 'bad-least.sql' => "\\set i least()\n" }
+       ],
+       [
+               'not enough arguments for greatest',
+               [qr{at least one argument expected \(greatest\)}],
+               { 'bad-greatest.sql' => "\\set i greatest()\n" }
+       ],
+       [
+               'not enough arguments for hash',
+               [qr{unexpected number of arguments \(hash\)}],
+               { 'bad-hash-1.sql' => "\\set i hash()\n" }
+       ],
+       [
+               'too many arguments for hash',
+               [qr{unexpected number of arguments \(hash\)}],
+               { 'bad-hash-2.sql' => "\\set i hash(1,2,3)\n" }
        ],);
 
 for my $t (@script_tests)