poppler/Stream.cc | 22 +++++++++++++++++++++- poppler/Stream.h | 3 ++- 2 files changed, 23 insertions(+), 2 deletions(-)
New commits: commit 12303bbdcc0cc72c6ff641140856f2c1f51041b8 Author: William Bader <[email protected]> Date: Sun Sep 13 05:22:19 2020 +0100 Improve EmbedStream::reset error checking. diff --git a/poppler/Stream.cc b/poppler/Stream.cc index 2b3eba85..2220f29c 100644 --- a/poppler/Stream.cc +++ b/poppler/Stream.cc @@ -1090,7 +1090,12 @@ void EmbedStream::reset() str->reset(); // Might be a FilterStream that does not support str->setPos(start) while (str->getPos() < start) { - str->getChar(); + if (str->getChar() == EOF) { + break; + } + } + if (str->getPos() != start) { + error(errInternal, -1, "Failed to reset EmbedStream"); } } record = false; commit e2ecddf3fc1f93a68b0ae535813f8b0d5ec672b5 Author: William Bader <[email protected]> Date: Sun Sep 13 04:52:45 2020 +0100 Implement EmbedStream::reset() to fix pdftops -level1sep -optimizecolorspace for in-line images. diff --git a/poppler/Stream.cc b/poppler/Stream.cc index 6eedfa00..2b3eba85 100644 --- a/poppler/Stream.cc +++ b/poppler/Stream.cc @@ -1069,6 +1069,7 @@ EmbedStream::EmbedStream(Stream *strA, Object &&dictA, bool limitedA, Goffset le reusable = reusableA; record = false; replay = false; + start = str->getPos(); if (reusable) { bufData = (unsigned char *)gmalloc(16384); bufMax = 16384; @@ -1083,13 +1084,27 @@ EmbedStream::~EmbedStream() gfree(bufData); } +void EmbedStream::reset() +{ + if (str->getPos() != start) { + str->reset(); + // Might be a FilterStream that does not support str->setPos(start) + while (str->getPos() < start) { + str->getChar(); + } + } + record = false; + replay = false; + bufPos = 0; +} + BaseStream *EmbedStream::copy() { error(errInternal, -1, "Called copy() on EmbedStream"); return nullptr; } -Stream *EmbedStream::makeSubStream(Goffset start, bool limitedA, Goffset lengthA, Object &&dictA) +Stream *EmbedStream::makeSubStream(Goffset startA, bool limitedA, Goffset lengthA, Object &&dictA) { error(errInternal, -1, "Called makeSubStream() on EmbedStream"); return nullptr; diff --git a/poppler/Stream.h b/poppler/Stream.h index 5d9ad0c9..abd60d4b 100644 --- a/poppler/Stream.h +++ b/poppler/Stream.h @@ -747,7 +747,7 @@ public: BaseStream *copy() override; Stream *makeSubStream(Goffset start, bool limitedA, Goffset lengthA, Object &&dictA) override; StreamKind getKind() const override { return str->getKind(); } - void reset() override { } + void reset() override; int getChar() override; int lookChar() override; Goffset getPos() override; @@ -774,6 +774,7 @@ private: long bufMax; long bufLen; long bufPos; + Goffset start; }; //------------------------------------------------------------------------ _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
