Commit ad0ab25d660184de00e63067ed5fcdf9453a66f0
1 parent
8b073eed
fix bug in C API, test invalid password specifically
git-svn-id: svn+q:///qpdf/trunk@832 71b93d88-0707-0410-a8cf-f5a4172ac649
Showing
5 changed files
with
26 additions
and
8 deletions
TODO
| ... | ... | @@ -16,11 +16,6 @@ |
| 16 | 16 | * Add comments for the security functions that map them back to the |
| 17 | 17 | items in Adobe's products. |
| 18 | 18 | |
| 19 | - * Change the C error interface so that warnings and errors are | |
| 20 | - pointers that can be queried using more C API functions. We need a | |
| 21 | - way to get a full string as well as an error code, file name, | |
| 22 | - offset, and message. | |
| 23 | - | |
| 24 | 19 | * "Delphi wrapper unit 'qpdf.pas' created by Zarko Gajic |
| 25 | 20 | (http://delphi.about.com). .. use at your own risk and for whatever |
| 26 | 21 | the purpose you want .. no support provided. Sample code provided." | ... | ... |
libqpdf/qpdf-c.cc
| ... | ... | @@ -51,7 +51,7 @@ static void call_read(qpdf_data qpdf) |
| 51 | 51 | } |
| 52 | 52 | |
| 53 | 53 | // must set qpdf->filename |
| 54 | -static void call_init_write(qpdf_data qpdf) | |
| 54 | +void call_init_write(qpdf_data qpdf) | |
| 55 | 55 | { |
| 56 | 56 | qpdf->qpdf_writer = new QPDFWriter(*(qpdf->qpdf), qpdf->filename); |
| 57 | 57 | } |
| ... | ... | @@ -76,10 +76,12 @@ static QPDF_ERROR_CODE trap_errors(qpdf_data qpdf, void (*fn)(qpdf_data)) |
| 76 | 76 | catch (std::runtime_error& e) |
| 77 | 77 | { |
| 78 | 78 | qpdf->error = new QPDFExc(qpdf_e_system, "", "", 0, e.what()); |
| 79 | + status |= QPDF_ERRORS; | |
| 79 | 80 | } |
| 80 | 81 | catch (std::exception& e) |
| 81 | 82 | { |
| 82 | 83 | qpdf->error = new QPDFExc(qpdf_e_internal, "", "", 0, e.what()); |
| 84 | + status |= QPDF_ERRORS; | |
| 83 | 85 | } |
| 84 | 86 | |
| 85 | 87 | if (qpdf_more_warnings(qpdf)) | ... | ... |
qpdf/qtest/qpdf.test
| ... | ... | @@ -830,7 +830,7 @@ my @encrypted_files = |
| 830 | 830 | ['long-password', 'asdf asdf asdf asdf asdf asdf qwer'], |
| 831 | 831 | ['long-password', 'asdf asdf asdf asdf asdf asdf qw']); |
| 832 | 832 | |
| 833 | -$n_tests += 3 + (2 * (@encrypted_files)) + (6 * (@encrypted_files - 3)) + 8; | |
| 833 | +$n_tests += 3 + (2 * (@encrypted_files)) + (6 * (@encrypted_files - 3)) + 0; | |
| 834 | 834 | |
| 835 | 835 | $td->runtest("encrypted file", |
| 836 | 836 | {$td->COMMAND => "test_driver 2 U25A0.pdf"}, |
| ... | ... | @@ -952,6 +952,10 @@ $td->runtest("invalid password", |
| 952 | 952 | {$td->STRING => "enc-R2,V1,U=view.pdf: invalid password\n", |
| 953 | 953 | $td->EXIT_STATUS => 2}, |
| 954 | 954 | $td->NORMALIZE_NEWLINES); |
| 955 | +$td->runtest("C API: invalid password", | |
| 956 | + {$td->COMMAND => "qpdf-ctest 2 enc-R2,V1,U=view.pdf '' a.qdf"}, | |
| 957 | + {$td->FILE => "c-invalid-password.out", $td->EXIT_STATUS => 0}, | |
| 958 | + $td->NORMALIZE_NEWLINES); | |
| 955 | 959 | |
| 956 | 960 | my @cenc = ( |
| 957 | 961 | [11, 'hybrid-xref.pdf', "''", 'r2', ""], | ... | ... |
qpdf/qtest/qpdf/c-invalid-password.out
0 → 100644
qpdf/qtest/qpdf/c-write-damaged.out
| 1 | 1 | warning: append-page-content-damaged.pdf: file is damaged |
| 2 | + code: 5 | |
| 3 | + file: append-page-content-damaged.pdf | |
| 4 | + pos : 0 | |
| 5 | + text: file is damaged | |
| 2 | 6 | warning: append-page-content-damaged.pdf: can't find startxref |
| 3 | -warning: Attempting to reconstruct cross-reference table | |
| 7 | + code: 5 | |
| 8 | + file: append-page-content-damaged.pdf | |
| 9 | + pos : 0 | |
| 10 | + text: can't find startxref | |
| 11 | +warning: append-page-content-damaged.pdf: Attempting to reconstruct cross-reference table | |
| 12 | + code: 5 | |
| 13 | + file: append-page-content-damaged.pdf | |
| 14 | + pos : 0 | |
| 15 | + text: Attempting to reconstruct cross-reference table | ... | ... |