Commit 1f4568684341ec3a0abb0c7ce72580b07b73d646

Authored by Jay Berkenbilt
1 parent a2c4a2b1

Handle --encrypt -- without crashing

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