Commit 1f4568684341ec3a0abb0c7ce72580b07b73d646

Authored by Jay Berkenbilt
1 parent a2c4a2b1

Handle --encrypt -- without crashing

libqpdf/QPDFJob_argv.cc
... ... @@ -163,6 +163,7 @@ ArgParser::argShowCrypto()
163 163 void
164 164 ArgParser::argEncrypt()
165 165 {
  166 + this->c_enc = c_main->encrypt(0, "", "");
166 167 this->accumulated_args.clear();
167 168 this->ap.selectOptionTable(O_ENCRYPTION);
168 169 }
... ...
libqpdf/QPDFJob_config.cc
... ... @@ -1042,6 +1042,9 @@ QPDFJob::EncConfig::EncConfig(Config* c) :
1042 1042 QPDFJob::Config*
1043 1043 QPDFJob::EncConfig::endEncrypt()
1044 1044 {
  1045 + if (config->o.m->keylen == 0) {
  1046 + usage("encryption key length is required");
  1047 + }
1045 1048 config->o.m->encrypt = true;
1046 1049 config->o.m->decrypt = false;
1047 1050 config->o.m->copy_encryption = false;
... ...
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 = 21;
  18 +my $n_tests = 22;
19 19  
20 20 $td->runtest("required argument",
21 21 {$td->COMMAND => "qpdf --password minimal.pdf"},
... ... @@ -107,6 +107,11 @@ $td->runtest("empty and replace-input",
107 107 {$td->REGEXP => ".*--replace-input may not be used with --empty.*",
108 108 $td->EXIT_STATUS => 2},
109 109 $td->NORMALIZE_NEWLINES);
  110 +$td->runtest("missing key length",
  111 + {$td->COMMAND => "qpdf --encrypt --"},
  112 + {$td->REGEXP => ".*encryption key length is required",
  113 + $td->EXIT_STATUS => 2},
  114 + $td->NORMALIZE_NEWLINES);
110 115  
111 116 # Disallow mixing positional and flag-style encryption arguments.
112 117 my @bad_enc = (
... ...