Passed
Pull Request — master (#377)
by Konrad
02:14
created

RawDataParserTest::testGetRawObjectIssue372()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 8
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 19
rs 10
1
<?php
2
3
/**
4
 * @file This file is part of the PdfParser library.
5
 *
6
 * @author  Konrad Abicht <[email protected]>
7
 * @date    2020-06-01
8
 *
9
 * @author  Sébastien MALOT <[email protected]>
10
 * @date    2017-01-03
11
 *
12
 * @license LGPLv3
13
 * @url     <https://github.com/smalot/pdfparser>
14
 *
15
 *  PdfParser is a pdf library written in PHP, extraction oriented.
16
 *  Copyright (C) 2017 - Sébastien MALOT <[email protected]>
17
 *
18
 *  This program is free software: you can redistribute it and/or modify
19
 *  it under the terms of the GNU Lesser General Public License as published by
20
 *  the Free Software Foundation, either version 3 of the License, or
21
 *  (at your option) any later version.
22
 *
23
 *  This program is distributed in the hope that it will be useful,
24
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
25
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
 *  GNU Lesser General Public License for more details.
27
 *
28
 *  You should have received a copy of the GNU Lesser General Public License
29
 *  along with this program.
30
 *  If not, see <http://www.pdfparser.org/sites/default/LICENSE.txt>.
31
 */
32
33
namespace Tests\Smalot\PdfParser\Integration\RawData;
34
35
use Smalot\PdfParser\RawData\RawDataParser;
36
use Tests\Smalot\PdfParser\TestCase;
37
38
class RawDataParserHelper extends RawDataParser
39
{
40
    /**
41
     * Expose protected function "getRawObject".
42
     */
43
    public function exposeGetRawObject($pdfData, $offset = 0) {
44
        return $this->getRawObject($pdfData, $offset);
45
    }
46
}
47
48
class RawDataParserTest extends TestCase
49
{
50
    protected function setUp()
51
    {
52
        parent::setUp();
53
54
        $this->fixture = new RawDataParserHelper();
55
    }
56
57
    /**
58
     * Tests buggy behavior of getRawObject.
59
     *
60
     * When PDF has corrupted xref table getRawObject may run into an infinite loop.
61
     *
62
     * @see https://github.com/smalot/pdfparser/issues/372
63
     * @see https://github.com/smalot/pdfparser/pull/377
64
     */
65
    public function testGetRawObjectIssue372()
66
    {
67
        // The following $data content is a minimal example to trigger the infinite loop
68
        $data = '<</Producer (eDkºãa˜þõ‚LÅòÕ�PïÙ��)©)>>';
69
70
        // calling "getRawObject" via "exposeGetRawObject" would result in an infinite loop
71
        // if the fix is not there.
72
        $result = $this->fixture->exposeGetRawObject($data);
73
74
        $this->assertEquals(
75
            [
76
                '<<',
77
                [
78
                    ['/', 'Producer', 11],
79
                    ['(', 'eDkºãa˜þõ‚LÅòÕ�PïÙ��', 52],
80
                ],
81
                52
82
            ],
83
            $result
84
        );
85
    }
86
}
87