Commit be27d47bdc1195f425821d479b9ca733051343c0

Authored by Jay Berkenbilt
1 parent 48864b8d

Use better error for getStreamData failure

If the stream isn't filterable but we call getStreamData, throw a
regular exception instead of a logic error so that normal error
handling and reporting mechanisms will be used.
libqpdf/QPDF_Stream.cc
... ... @@ -96,7 +96,9 @@ QPDF_Stream::getStreamData(qpdf_stream_decode_level_e decode_level)
96 96 Pl_Buffer buf("stream data buffer");
97 97 if (! pipeStreamData(&buf, 0, decode_level, false, false))
98 98 {
99   - throw std::logic_error("getStreamData called on unfilterable stream");
  99 + throw QPDFExc(qpdf_e_unsupported, qpdf->getFilename(),
  100 + "", this->offset,
  101 + "getStreamData called on unfilterable stream");
100 102 }
101 103 QTC::TC("qpdf", "QPDF_Stream getStreamData");
102 104 return buf.getBuffer();
... ...
qpdf/qtest/qpdf/issue-148.out
... ... @@ -4,4 +4,7 @@ WARNING: issue-148.pdf (xref stream: object 8 0, file position 73): attempting t
4 4 WARNING: issue-148.pdf (xref stream: object 8 0, file position 73): recovered stream length: 2
5 5 WARNING: issue-148.pdf (xref stream: object 8 0, file position 85): expected endobj
6 6 WARNING: issue-148.pdf (file position 73): error decoding stream data for object 8 0: stream inflate: inflate: data: incorrect header check
7   -getStreamData called on unfilterable stream
  7 +WARNING: issue-148.pdf: file is damaged
  8 +WARNING: issue-148.pdf (file position 73): getStreamData called on unfilterable stream
  9 +WARNING: issue-148.pdf: Attempting to reconstruct cross-reference table
  10 +issue-148.pdf: unable to find trailer dictionary while recovering damaged file
... ...