From 98b2cccfb362d16fce53b1d4e51ac1f2b917da99 Mon Sep 17 00:00:00 2001 From: PrinsFrank <25006490+PrinsFrank@users.noreply.github.com> Date: Mon, 8 Jun 2026 19:39:17 +0200 Subject: [PATCH] Gracefully handle missing stream lengths --- .../Item/UncompressedObject/UncompressedObjectParser.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Document/Object/Item/UncompressedObject/UncompressedObjectParser.php b/src/Document/Object/Item/UncompressedObject/UncompressedObjectParser.php index 77caae1..f5d7424 100644 --- a/src/Document/Object/Item/UncompressedObject/UncompressedObjectParser.php +++ b/src/Document/Object/Item/UncompressedObject/UncompressedObjectParser.php @@ -20,9 +20,8 @@ public static function parseObject(CrossReferenceEntryInUseObject $crossReferenc ?? throw new ParseFailureException('Unable to locate end of object'); if (($startStream = $document->stream->getStartNextLineAfter(Marker::STREAM, $startObj, $endObj)) !== null) { $dictionary = DictionaryParser::parse(null, $document->stream, $startObj, $startStream - $startObj); - $length = $dictionary->getValueForKey($document, DictionaryKey::LENGTH, IntegerValue::class)->value - ?? throw new ParseFailureException('Stream objects must have a length entry'); - $endStream = $document->stream->firstPos(Marker::END_STREAM, $startStream + $length, $document->stream->getSizeInBytes()) + $length = $dictionary->getValueForKey($document, DictionaryKey::LENGTH, IntegerValue::class)?->value; + $endStream = $document->stream->firstPos(Marker::END_STREAM, $startStream + ($length ?? 0), $document->stream->getSizeInBytes()) ?? throw new ParseFailureException('Unable to locate end of stream'); $endObj = $document->stream->firstPos(Marker::END_OBJ, $endStream, $document->stream->getSizeInBytes()) ?? throw new ParseFailureException('Unable to locate end of object');