Commit 98014ec98a0175d6853ac5fe0ee420913fb78d16
1 parent
b075de73
Fix error with stream recovery (fixes #1042)
Showing
2 changed files
with
9 additions
and
1 deletions
ChangeLog
| 1 | +2023-10-07 Jay Berkenbilt <ejb@ql.org> | ||
| 2 | + | ||
| 3 | + * Bug fix: when piping stream data, don't call finish on failure | ||
| 4 | + if the failure was caused by a previous call to finish. Fixes | ||
| 5 | + #1042. | ||
| 6 | + | ||
| 1 | 2023-09-05 Jay Berkenbilt <ejb@ql.org> | 7 | 2023-09-05 Jay Berkenbilt <ejb@ql.org> |
| 2 | 8 | ||
| 3 | * 11.6.1: release | 9 | * 11.6.1: release |
libqpdf/QPDF.cc
| @@ -2418,6 +2418,7 @@ QPDF::pipeStreamData( | @@ -2418,6 +2418,7 @@ QPDF::pipeStreamData( | ||
| 2418 | decryptStream(encp, file, qpdf_for_warning, pipeline, og, stream_dict, to_delete); | 2418 | decryptStream(encp, file, qpdf_for_warning, pipeline, og, stream_dict, to_delete); |
| 2419 | } | 2419 | } |
| 2420 | 2420 | ||
| 2421 | + bool attempted_finish = false; | ||
| 2421 | bool success = false; | 2422 | bool success = false; |
| 2422 | try { | 2423 | try { |
| 2423 | file->seek(offset, SEEK_SET); | 2424 | file->seek(offset, SEEK_SET); |
| @@ -2432,6 +2433,7 @@ QPDF::pipeStreamData( | @@ -2432,6 +2433,7 @@ QPDF::pipeStreamData( | ||
| 2432 | length -= len; | 2433 | length -= len; |
| 2433 | pipeline->write(buf, len); | 2434 | pipeline->write(buf, len); |
| 2434 | } | 2435 | } |
| 2436 | + attempted_finish = true; | ||
| 2435 | pipeline->finish(); | 2437 | pipeline->finish(); |
| 2436 | success = true; | 2438 | success = true; |
| 2437 | } catch (QPDFExc& e) { | 2439 | } catch (QPDFExc& e) { |
| @@ -2461,7 +2463,7 @@ QPDF::pipeStreamData( | @@ -2461,7 +2463,7 @@ QPDF::pipeStreamData( | ||
| 2461 | } | 2463 | } |
| 2462 | } | 2464 | } |
| 2463 | } | 2465 | } |
| 2464 | - if (!success) { | 2466 | + if (!attempted_finish) { |
| 2465 | try { | 2467 | try { |
| 2466 | pipeline->finish(); | 2468 | pipeline->finish(); |
| 2467 | } catch (std::exception&) { | 2469 | } catch (std::exception&) { |