Commit 2af08ee3984d2f5f2ea3432572bcb631e3085b7e
1 parent
599daddb
checkpoint -- will have to finish another day
git-svn-id: svn+q:///qpdf/trunk@661 71b93d88-0707-0410-a8cf-f5a4172ac649
Showing
5 changed files
with
29 additions
and
12 deletions
ChangeLog
| @@ -8,8 +8,8 @@ | @@ -8,8 +8,8 @@ | ||
| 8 | structure of file, attempt to decode all stream data. | 8 | structure of file, attempt to decode all stream data. |
| 9 | 9 | ||
| 10 | * libqpdf/QPDFWriter.cc (QPDFWriter::writeObject): In QDF mode, | 10 | * libqpdf/QPDFWriter.cc (QPDFWriter::writeObject): In QDF mode, |
| 11 | - write a comment to the QDF file that indicates the object ID from | ||
| 12 | - the original file. | 11 | + write a comment to the QDF file before each object that indicates |
| 12 | + the object ID of the corresponding object from the original file. | ||
| 13 | 13 | ||
| 14 | * libqpdf/QPDF.cc (QPDF::pipeStreamData): Issue a warning instead | 14 | * libqpdf/QPDF.cc (QPDF::pipeStreamData): Issue a warning instead |
| 15 | of failing if there is a problem found while decoding stream. | 15 | of failing if there is a problem found while decoding stream. |
qpdf/qpdf.cc
| @@ -455,7 +455,7 @@ int main(int argc, char* argv[]) | @@ -455,7 +455,7 @@ int main(int argc, char* argv[]) | ||
| 455 | // 1 2 3 4 5 6 7 8 | 455 | // 1 2 3 4 5 6 7 8 |
| 456 | // 12345678901234567890123456789012345678901234567890123456789012345678901234567890 | 456 | // 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
| 457 | std::cout | 457 | std::cout |
| 458 | - << whoami << " version 2.0.4" << std::endl | 458 | + << whoami << " version 2.0.4+" << std::endl |
| 459 | << "Copyright (c) 2005-2009 Jay Berkenbilt" | 459 | << "Copyright (c) 2005-2009 Jay Berkenbilt" |
| 460 | << std::endl | 460 | << std::endl |
| 461 | << "This software may be distributed under the terms of version 2 of the" | 461 | << "This software may be distributed under the terms of version 2 of the" |
| @@ -952,6 +952,8 @@ int main(int argc, char* argv[]) | @@ -952,6 +952,8 @@ int main(int argc, char* argv[]) | ||
| 952 | } | 952 | } |
| 953 | if (! pdf.getWarnings().empty()) | 953 | if (! pdf.getWarnings().empty()) |
| 954 | { | 954 | { |
| 955 | + std::cerr << whoami << ": operation succeeded with warnings;" | ||
| 956 | + << " resulting file may have some problems" << std::endl; | ||
| 955 | exit(EXIT_WARNING); | 957 | exit(EXIT_WARNING); |
| 956 | } | 958 | } |
| 957 | } | 959 | } |
qpdf/qtest/qpdf.test
| @@ -282,8 +282,8 @@ check_pdf("no recompression", | @@ -282,8 +282,8 @@ check_pdf("no recompression", | ||
| 282 | show_ntests(); | 282 | show_ntests(); |
| 283 | # ---------- | 283 | # ---------- |
| 284 | $td->notify("--- Object Stream Tests ---"); | 284 | $td->notify("--- Object Stream Tests ---"); |
| 285 | -$n_tests += 36 * 6; | ||
| 286 | -$n_compare_pdfs += 36; | 285 | +$n_tests += (36 * 4) + (12 * 2); |
| 286 | +$n_compare_pdfs += 36 + 12; | ||
| 287 | 287 | ||
| 288 | for (my $n = 16; $n <= 19; ++$n) | 288 | for (my $n = 16; $n <= 19; ++$n) |
| 289 | { | 289 | { |
| @@ -294,13 +294,23 @@ for (my $n = 16; $n <= 19; ++$n) | @@ -294,13 +294,23 @@ for (my $n = 16; $n <= 19; ++$n) | ||
| 294 | { | 294 | { |
| 295 | foreach my $qdf ('-qdf', '', '-encrypt "" x 128 --') | 295 | foreach my $qdf ('-qdf', '', '-encrypt "" x 128 --') |
| 296 | { | 296 | { |
| 297 | - # 6 tests + 1 compare_pdfs | 297 | + # 4 tests + 1 compare_pdfs * 36 cases |
| 298 | + # 2 tests + 1 compare_pdfs * 12 cases | ||
| 298 | $td->runtest("object stream mode", | 299 | $td->runtest("object stream mode", |
| 299 | {$td->COMMAND => | 300 | {$td->COMMAND => |
| 300 | "qpdf --static-id $flags $qdf $in a.pdf"}, | 301 | "qpdf --static-id $flags $qdf $in a.pdf"}, |
| 301 | {$td->STRING => "", | 302 | {$td->STRING => "", |
| 302 | $td->EXIT_STATUS => 0}); | 303 | $td->EXIT_STATUS => 0}); |
| 303 | compare_pdfs("good$n.pdf", "a.pdf"); | 304 | compare_pdfs("good$n.pdf", "a.pdf"); |
| 305 | + if ($qdf eq '-qdf') | ||
| 306 | + { | ||
| 307 | + $td->runtest("fix-qdf identity check", | ||
| 308 | + {$td->COMMAND => "fix-qdf a.pdf >| b.pdf"}, | ||
| 309 | + {$td->STRING => "", $td->EXIT_STATUS => 0}); | ||
| 310 | + $td->runtest("compare files", | ||
| 311 | + {$td->FILE => "a.pdf"}, | ||
| 312 | + {$td->FILE => "b.pdf"}); | ||
| 313 | + } | ||
| 304 | $td->runtest("convert to qdf", | 314 | $td->runtest("convert to qdf", |
| 305 | {$td->COMMAND => | 315 | {$td->COMMAND => |
| 306 | "qpdf --static-id -qdf -decrypt" . | 316 | "qpdf --static-id -qdf -decrypt" . |
| @@ -313,12 +323,15 @@ for (my $n = 16; $n <= 19; ++$n) | @@ -313,12 +323,15 @@ for (my $n = 16; $n <= 19; ++$n) | ||
| 313 | " -object-streams=disable a.pdf b.qdf"}, | 323 | " -object-streams=disable a.pdf b.qdf"}, |
| 314 | {$td->STRING => "", | 324 | {$td->STRING => "", |
| 315 | $td->EXIT_STATUS => 0}); | 325 | $td->EXIT_STATUS => 0}); |
| 316 | - $td->runtest("compare files", | ||
| 317 | - {$td->FILE => "a.qdf"}, | ||
| 318 | - {$td->FILE => "b.qdf"}); | ||
| 319 | - $td->runtest("fix-qdf identity check", | ||
| 320 | - {$td->COMMAND => "fix-qdf a.qdf >| b.pdf"}, | ||
| 321 | - {$td->STRING => "", $td->EXIT_STATUS => 0}); | 326 | + # XXX The comparison is broken because of the new original |
| 327 | + # object comments. We need a script that compares qpdfs | ||
| 328 | + # by normalizing those comments (like replacing the object | ||
| 329 | + # IDs with nnn) and then diffs. That will work here and | ||
| 330 | + # in some of the other failure cases. For the rest where | ||
| 331 | + # we're actually checking the qdf itself, we will need to | ||
| 332 | + # store the new qdf files with the object IDs. That can't | ||
| 333 | + # be done blindly -- we need to make sure the output is | ||
| 334 | + # correct! | ||
| 322 | $td->runtest("compare files", | 335 | $td->runtest("compare files", |
| 323 | {$td->FILE => "a.qdf"}, | 336 | {$td->FILE => "a.qdf"}, |
| 324 | {$td->FILE => "b.qdf"}); | 337 | {$td->FILE => "b.qdf"}); |
qpdf/qtest/qpdf/append-page-content-damaged.out
| 1 | WARNING: append-page-content-damaged.pdf: offset 0: file is damaged | 1 | WARNING: append-page-content-damaged.pdf: offset 0: file is damaged |
| 2 | WARNING: append-page-content-damaged.pdf: can't find startxref | 2 | WARNING: append-page-content-damaged.pdf: can't find startxref |
| 3 | WARNING: Attempting to reconstruct cross-reference table | 3 | WARNING: Attempting to reconstruct cross-reference table |
| 4 | +qpdf: operation succeeded with warnings; resulting file may have some problems |
qpdf/qtest/qpdf/heifer.out
| @@ -2,3 +2,4 @@ WARNING: heifer.pdf: offset 0: file is damaged | @@ -2,3 +2,4 @@ WARNING: heifer.pdf: offset 0: file is damaged | ||
| 2 | WARNING: heifer.pdf: offset 92741: xref not found | 2 | WARNING: heifer.pdf: offset 92741: xref not found |
| 3 | WARNING: Attempting to reconstruct cross-reference table | 3 | WARNING: Attempting to reconstruct cross-reference table |
| 4 | WARNING: heifer.pdf: offset 51: attempting to recover stream length | 4 | WARNING: heifer.pdf: offset 51: attempting to recover stream length |
| 5 | +qpdf: operation succeeded with warnings; resulting file may have some problems |