@@ -631,58 +631,60 @@ protected function getRawObject($pdfData, $offset = 0)
631
631
632
632
case '[ ' : // \x5B LEFT SQUARE BRACKET
633
633
case '] ' : // \x5D RIGHT SQUARE BRACKET
634
- // array object
635
- $ objtype = $ char ;
636
- ++$ offset ;
637
- if ('[ ' == $ char ) {
634
+ // array object
635
+ $ objtype = $ char ;
636
+ ++$ offset ;
637
+ if ('[ ' == $ char ) {
638
+ // get array content
639
+ $ objval = [];
640
+ do {
641
+ $ oldOffset = $ offset ;
642
+ // get element
643
+ $ element = $ this ->getRawObject ($ pdfData , $ offset );
644
+ $ offset = $ element [2 ];
645
+ $ objval [] = $ element ;
646
+ } while (('] ' != $ element [0 ]) && ($ offset != $ oldOffset ));
647
+ // remove closing delimiter
648
+ array_pop ($ objval );
649
+ }
650
+ break ;
651
+
652
+ case '< ' : // \x3C LESS-THAN SIGN
653
+ case '> ' : // \x3E GREATER-THAN SIGN
654
+ if (isset ($ pdfData [($ offset + 1 )]) && ($ pdfData [($ offset + 1 )] == $ char )) {
655
+ // dictionary object
656
+ $ objtype = $ char .$ char ;
657
+ $ offset += 2 ;
658
+ if ('< ' == $ char ) {
638
659
// get array content
639
660
$ objval = [];
640
661
do {
662
+ $ oldOffset = $ offset ;
641
663
// get element
642
664
$ element = $ this ->getRawObject ($ pdfData , $ offset );
643
665
$ offset = $ element [2 ];
644
666
$ objval [] = $ element ;
645
- } while (' ] ' != $ element [0 ]);
667
+ } while (( ' >> ' != $ element [0 ]) && ( $ offset != $ oldOffset ) );
646
668
// remove closing delimiter
647
669
array_pop ($ objval );
648
670
}
649
- break ;
650
-
651
- case '< ' : // \x3C LESS-THAN SIGN
652
- case '> ' : // \x3E GREATER-THAN SIGN
653
- if (isset ($ pdfData [($ offset + 1 )]) && ($ pdfData [($ offset + 1 )] == $ char )) {
654
- // dictionary object
655
- $ objtype = $ char .$ char ;
656
- $ offset += 2 ;
657
- if ('< ' == $ char ) {
658
- // get array content
659
- $ objval = [];
660
- do {
661
- // get element
662
- $ element = $ this ->getRawObject ($ pdfData , $ offset );
663
- $ offset = $ element [2 ];
664
- $ objval [] = $ element ;
665
- } while ('>> ' != $ element [0 ]);
666
- // remove closing delimiter
667
- array_pop ($ objval );
668
- }
669
- } else {
670
- // hexadecimal string object
671
- $ objtype = $ char ;
672
- ++$ offset ;
673
- $ pregResult = preg_match (
671
+ } else {
672
+ // hexadecimal string object
673
+ $ objtype = $ char ;
674
+ ++$ offset ;
675
+ $ pregResult = preg_match (
674
676
'/^([0-9A-Fa-f\x09\x0a\x0c\x0d\x20]+)>/iU ' ,
675
677
substr ($ pdfData , $ offset ),
676
678
$ matches
677
679
);
678
- if (('< ' == $ char ) && 1 == $ pregResult ) {
679
- // remove white space characters
680
- $ objval = strtr ($ matches [1 ], "\x09\x0a\x0c\x0d\x20" , '' );
681
- $ offset += \strlen ($ matches [0 ]);
682
- } elseif (false !== ($ endpos = strpos ($ pdfData , '> ' , $ offset ))) {
683
- $ offset = $ endpos + 1 ;
684
- }
680
+ if (('< ' == $ char ) && 1 == $ pregResult ) {
681
+ // remove white space characters
682
+ $ objval = strtr ($ matches [1 ], "\x09\x0a\x0c\x0d\x20" , '' );
683
+ $ offset += \strlen ($ matches [0 ]);
684
+ } elseif (false !== ($ endpos = strpos ($ pdfData , '> ' , $ offset ))) {
685
+ $ offset = $ endpos + 1 ;
685
686
}
687
+ }
686
688
break ;
687
689
688
690
default :
0 commit comments