[BUG] pgbench nested \if conditions incorrectly processed

Started by Michail Nikolaevover 1 year ago2 messageshackers
Jump to latest
#1Michail Nikolaev
michail.nikolaev@gmail.com

Hello,

I’ve found an issue with pgbench: it processes nested \if conditions
incorrectly.

For example:

\if false
\if true
DROP TABLE money CASCADE;
\endif
\endif

In this case, the table will be dropped, which is unexpected behavior.

Attached is a fix that addresses this issue, along with a regression test.

Best regards,
Mikhail

Attachments:

v1-0001-pgbench-Fix-nested-if-elif-else-handling-in-scrip.patchapplication/octet-stream; name=v1-0001-pgbench-Fix-nested-if-elif-else-handling-in-scrip.patchDownload+66-3
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michail Nikolaev (#1)
Re: [BUG] pgbench nested \if conditions incorrectly processed

Michail Nikolaev <michail.nikolaev@gmail.com> writes:

I’ve found an issue with pgbench: it processes nested \if conditions
incorrectly.

Right you are.

Attached is a fix that addresses this issue, along with a regression test.

Code fix looks good, but I don't agree with creating a separate
test script for this --- that entails spinning up an entire new
server instance, which is an awful lot of cycles to expend in
every check-world run forevermore for this size of problem.
I'll just add the test case to 001_pgbench_with_server.pl instead.

Looking at the code coverage report [1]https://coverage.postgresql.org/src/bin/pgbench/pgbench.c.gcov.html#3915, it seems we are also missing
any test that covers \if in the IFSTATE_IGNORED/IFSTATE_ELSE_FALSE
case. That code appears correct, but given this bug it seems prudent
to extend the test to cover that path too. I'll do that and push.

regards, tom lane

[1]: https://coverage.postgresql.org/src/bin/pgbench/pgbench.c.gcov.html#3915