postgres.git / summary / log / commit / refs

commit    39d51fe87dae843574fa2349128679800bfe7ccd
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Fri Jul 27 04:40:24 2018 +0000
First released in: 12.0, 11.0

    Fix handling of pgbench's hash when no argument is provided
    
    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 | 2 +- src/bin/pgbench/t/002_pgbench_no_server.pl | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/bin/pgbench/exprparse.y b/src/bin/pgbench/exprparse.y index 66288632d11..f7c56cc6a31 100644 --- a/src/bin/pgbench/exprparse.y +++ b/src/bin/pgbench/exprparse.y @@ -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); diff --git a/src/bin/pgbench/t/002_pgbench_no_server.pl b/src/bin/pgbench/t/002_pgbench_no_server.pl index a2845a583bd..c1c2c1e3d4a 100644 --- a/src/bin/pgbench/t/002_pgbench_no_server.pl +++ b/src/bin/pgbench/t/002_pgbench_no_server.pl @@ -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) [parent: 9f77ad2672f1]