Commit 1f4568684341ec3a0abb0c7ce72580b07b73d646
1 parent
a2c4a2b1
Handle --encrypt -- without crashing
Showing
3 changed files
with
10 additions
and
1 deletions
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 = ( |