Commit fbd3e56da787d18e7a8794580d0e95b7669d1bc4

Authored by Jay Berkenbilt
1 parent 19608ec1

Ignore -- at the top level arg parser (fixes #652)

This was unintended behavior that was added back for backward
compatibility. It is intentionally undocumented.
ChangeLog
1 2022-02-15 Jay Berkenbilt <ejb@ql.org> 1 2022-02-15 Jay Berkenbilt <ejb@ql.org>
2 2
  3 + * Bug fix: 10.6.0 inadvertently removed an unknown/undocumented
  4 + CLI parsing feature, which has been restored in 10.6.2. Fixes #652.
  5 +
3 * Don't map 0x18 through 0x1f, 0x7f, 0x9f, or 0xad as fixed points 6 * Don't map 0x18 through 0x1f, 0x7f, 0x9f, or 0xad as fixed points
4 when transcoding UTF-8 to PDFDoc. These codepoints have different 7 when transcoding UTF-8 to PDFDoc. These codepoints have different
5 meanings in those two encoding systems. Fixes #650. 8 meanings in those two encoding systems. Fixes #650.
libqpdf/QPDFArgParser.cc
@@ -554,8 +554,7 @@ QPDFArgParser::parseArgs() @@ -554,8 +554,7 @@ QPDFArgParser::parseArgs()
554 bool have_parameter = false; 554 bool have_parameter = false;
555 std::string o_arg(arg); 555 std::string o_arg(arg);
556 std::string arg_s(arg); 556 std::string arg_s(arg);
557 - if ((strcmp(arg, "--") == 0) &&  
558 - (this->m->option_table != &this->m->main_option_table)) 557 + if (strcmp(arg, "--") == 0)
559 { 558 {
560 // Special case for -- option, which is used to break out 559 // Special case for -- option, which is used to break out
561 // of subparsers. 560 // of subparsers.
libqpdf/QPDFJob_argv.cc
@@ -67,6 +67,11 @@ ArgParser::initOptionTables() @@ -67,6 +67,11 @@ ArgParser::initOptionTables()
67 this->ap.addFinalCheck([this](){c_main->checkConfiguration();}); 67 this->ap.addFinalCheck([this](){c_main->checkConfiguration();});
68 // add_help is defined in auto_job_help.hh 68 // add_help is defined in auto_job_help.hh
69 add_help(this->ap); 69 add_help(this->ap);
  70 + // Special case: ignore -- at the top level. This undocumented
  71 + // behavior is for backward compatibility; it was unintentionally
  72 + // the case prior to 10.6, and some users were relying on it.
  73 + this->ap.selectMainOptionTable();
  74 + this->ap.addBare("--", [](){});
70 } 75 }
71 76
72 void 77 void
qpdf/qtest/qpdf.test
@@ -149,7 +149,7 @@ foreach my $c (@completion_tests) @@ -149,7 +149,7 @@ foreach my $c (@completion_tests)
149 show_ntests(); 149 show_ntests();
150 # ---------- 150 # ----------
151 $td->notify("--- Argument Parsing ---"); 151 $td->notify("--- Argument Parsing ---");
152 -$n_tests += 12; 152 +$n_tests += 13;
153 153
154 $td->runtest("required argument", 154 $td->runtest("required argument",
155 {$td->COMMAND => "qpdf --password minimal.pdf"}, 155 {$td->COMMAND => "qpdf --password minimal.pdf"},
@@ -211,6 +211,14 @@ $td-&gt;runtest(&quot;duplicated pages password&quot;, @@ -211,6 +211,14 @@ $td-&gt;runtest(&quot;duplicated pages password&quot;,
211 {$td->REGEXP => ".*password already specified.*", 211 {$td->REGEXP => ".*password already specified.*",
212 $td->EXIT_STATUS => 2}, 212 $td->EXIT_STATUS => 2},
213 $td->NORMALIZE_NEWLINES); 213 $td->NORMALIZE_NEWLINES);
  214 +# Ignoring -- at the top level was never intended but turned out to
  215 +# have been there for a long time so that people relied on it. It is
  216 +# intentionally not documented.
  217 +$td->runtest("ignore -- at top level",
  218 + {$td->COMMAND => "qpdf -- --check -- minimal.pdf --"},
  219 + {$td->REGEXP => ".*No syntax or stream encoding errors found.*",
  220 + $td->EXIT_STATUS => 0},
  221 + $td->NORMALIZE_NEWLINES);
214 222
215 show_ntests(); 223 show_ntests();
216 # ---------- 224 # ----------