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