diff --git a/src/PdfParser/CrossReference/AbstractReader.php b/src/PdfParser/CrossReference/AbstractReader.php index 8953e63..2127f44 100644 --- a/src/PdfParser/CrossReference/AbstractReader.php +++ b/src/PdfParser/CrossReference/AbstractReader.php @@ -35,7 +35,6 @@ abstract class AbstractReader * * @param PdfParser $parser * @throws CrossReferenceException - * @throws PdfTypeException */ public function __construct(PdfParser $parser) { @@ -57,7 +56,6 @@ public function getTrailer() * Read the trailer dictionary. * * @throws CrossReferenceException - * @throws PdfTypeException */ protected function readTrailer() { diff --git a/src/PdfParser/CrossReference/FixedReader.php b/src/PdfParser/CrossReference/FixedReader.php index 603bde3..7871f67 100644 --- a/src/PdfParser/CrossReference/FixedReader.php +++ b/src/PdfParser/CrossReference/FixedReader.php @@ -71,7 +71,7 @@ public function getOffsetFor($objectNumber) $position = $offset + 20 * ($objectNumber - $startObject); $this->reader->ensure($position, 20); $line = $this->reader->readBytes(20); - if ($line[17] === 'f') { + if ($line === false || $line[17] === 'f') { return false; } diff --git a/tests/functional/PdfParser/CrossReference/FixedReaderTest.php b/tests/functional/PdfParser/CrossReference/FixedReaderTest.php index 7de2c60..c613654 100644 --- a/tests/functional/PdfParser/CrossReference/FixedReaderTest.php +++ b/tests/functional/PdfParser/CrossReference/FixedReaderTest.php @@ -204,6 +204,21 @@ public function testGetOffset($table, $expectedOffsets) } } + public function testGetOffsetWhileStreamWasReset() + { + $table = "0 2\n" . + "0000000000 65535 f \n" . + "0000001000 00000 n \n" . + "trailer<>"; + + $reader = StreamReader::createByString($table); + $xref = new FixedReader(new PdfParser($reader)); + $stream = $reader->getStream(); + \ftruncate($stream, 40); + + $this->assertFalse($xref->getOffsetFor(1)); + } + /** * @throws CrossReferenceException */