From 04c0897d3bcafe4ca61967d5ab1b5669f3cbe80b Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 19 Jan 2024 14:18:20 +0900 Subject: [PATCH] psql: Add ignore_slash_options in bind's inactive branch All commands accepting arguments, handling them with OT_NORMAL, OT_SQLID or OT_SQLIDHACK, should call ignore_slash_options() in inactive branch to scan and discard extra arguments. All the backslash commands that handle arguments do so, except \bind. This commit adds the missing ignore_slash_options to \bind's inactive branch. This inconsistency is a logic bug, however the behavior happens to be unchanged as any extra arguments are discarded later in HandleSlashCmds(), so no backpatch is done. While on it, this adds \bind to the list of backslash commands where inactive \if branches are checked in the tests for psql. Reported-by: Jelte Fennema-Nio Author: Anthonin Bonnefoy Discussion: https://postgr.es/m/CAGECzQR1+udGKz+FbHiCQ7CWDiF1fCGi2xYuvQUODdMAfJbaLA@mail.gmail.com --- src/bin/psql/command.c | 2 ++ src/test/regress/expected/psql.out | 1 + src/test/regress/sql/psql.sql | 1 + 3 files changed, 4 insertions(+) diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 9ad911e28d5..5c906e48068 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -486,6 +486,8 @@ exec_command_bind(PsqlScanState scan_state, bool active_branch) pset.bind_nparams = nparams; pset.bind_flag = true; } + else + ignore_slash_options(scan_state); return status; } diff --git a/src/test/regress/expected/psql.out b/src/test/regress/expected/psql.out index 4f3fd464207..ad027725624 100644 --- a/src/test/regress/expected/psql.out +++ b/src/test/regress/expected/psql.out @@ -4506,6 +4506,7 @@ bar 'bar' "bar" \echo `nosuchcommand` :foo :'foo' :"foo" \pset fieldsep | `nosuchcommand` :foo :'foo' :"foo" \a + SELECT $1 \bind 1 \g \C arg1 \c arg1 arg2 arg3 arg4 \cd arg1 diff --git a/src/test/regress/sql/psql.sql b/src/test/regress/sql/psql.sql index c997106b9f3..129f8533537 100644 --- a/src/test/regress/sql/psql.sql +++ b/src/test/regress/sql/psql.sql @@ -989,6 +989,7 @@ select \if false \\ (bogus \else \\ 42 \endif \\ forty_two; \echo `nosuchcommand` :foo :'foo' :"foo" \pset fieldsep | `nosuchcommand` :foo :'foo' :"foo" \a + SELECT $1 \bind 1 \g \C arg1 \c arg1 arg2 arg3 arg4 \cd arg1