Commit 985cdf91e6e7dc9f453f75911d0031de70feafda
1 parent
1d8dc489
CLI reject flags with parameters (fixes #1329)
Showing
3 changed files
with
20 additions
and
1 deletions
ChangeLog
| 1 | +2024-02-01 M Holger <m.holger@qpdf.org> | |
| 2 | + | |
| 3 | + * Bug fix: in qpdf CLI / QPDFJob throw a QPDFUsage exception if a | |
| 4 | + parameter is given for a flag. Previously the parameter was ignored and | |
| 5 | + e.g. --encrypt=n was treated as --encrypt. Fixes #1329. | |
| 6 | + | |
| 1 | 7 | 2024-09-20 Chao Li <mslichao@outlook.com> |
| 2 | 8 | |
| 3 | 9 | * Add C API function qpdf_oh_free_buffer to release memory allocated | ... | ... |
libqpdf/QPDFArgParser.cc
| ... | ... | @@ -9,6 +9,8 @@ |
| 9 | 9 | #include <cstring> |
| 10 | 10 | #include <iostream> |
| 11 | 11 | |
| 12 | +using namespace std::literals; | |
| 13 | + | |
| 12 | 14 | QPDFArgParser::Members::Members(int argc, char const* const argv[], char const* progname_env) : |
| 13 | 15 | |
| 14 | 16 | argc(argc), |
| ... | ... | @@ -532,7 +534,13 @@ QPDFArgParser::parseArgs() |
| 532 | 534 | } |
| 533 | 535 | usage(message); |
| 534 | 536 | } |
| 537 | + | |
| 535 | 538 | if (oe.bare_arg_handler) { |
| 539 | + if (have_parameter) { | |
| 540 | + usage( | |
| 541 | + "--"s + arg_s + " does not take a parameter, but \"" + parameter + | |
| 542 | + "\" was given"); | |
| 543 | + } | |
| 536 | 544 | oe.bare_arg_handler(); |
| 537 | 545 | } else if (oe.param_arg_handler) { |
| 538 | 546 | oe.param_arg_handler(parameter); | ... | ... |
qpdf/qtest/arg-parsing.test
| ... | ... | @@ -15,7 +15,7 @@ cleanup(); |
| 15 | 15 | |
| 16 | 16 | my $td = new TestDriver('arg-parsing'); |
| 17 | 17 | |
| 18 | -my $n_tests = 25; | |
| 18 | +my $n_tests = 26; | |
| 19 | 19 | |
| 20 | 20 | $td->runtest("required argument", |
| 21 | 21 | {$td->COMMAND => "qpdf --password minimal.pdf"}, |
| ... | ... | @@ -32,6 +32,11 @@ $td->runtest("required argument with choices", |
| 32 | 32 | {$td->REGEXP => "must be given as --decode-level=\\{.*all.*\\}", |
| 33 | 33 | $td->EXIT_STATUS => 2}, |
| 34 | 34 | $td->NORMALIZE_NEWLINES); |
| 35 | +$td->runtest("flag with parameter", | |
| 36 | + {$td->COMMAND => "qpdf --qdf=false minimal.pdf"}, | |
| 37 | + {$td->REGEXP => "--qdf does not take a parameter, but \"false\" was given", | |
| 38 | + $td->EXIT_STATUS => 2}, | |
| 39 | + $td->NORMALIZE_NEWLINES); | |
| 35 | 40 | copy("minimal.pdf", '@file.pdf'); |
| 36 | 41 | $td->runtest("\@file exists and file doesn't", |
| 37 | 42 | {$td->COMMAND => "qpdf --check \@file.pdf"}, | ... | ... |