@ -148,7 +148,8 @@ var Parser = (function ParserClosure() {
@@ -148,7 +148,8 @@ var Parser = (function ParserClosure() {
* @ returns { number } The inline stream length .
* /
findDefaultInlineStreamEnd ( stream ) {
const E = 0x45 , I = 0x49 , SPACE = 0x20 , LF = 0xA , CR = 0xD , n = 5 ;
const E = 0x45 , I = 0x49 , SPACE = 0x20 , LF = 0xA , CR = 0xD ;
const n = 10 , NUL = 0x0 ;
let startPos = stream . pos , state = 0 , ch , maybeEIPos ;
while ( ( ch = stream . getByte ( ) ) !== - 1 ) {
if ( state === 0 ) {
@ -159,10 +160,23 @@ var Parser = (function ParserClosure() {
@@ -159,10 +160,23 @@ var Parser = (function ParserClosure() {
assert ( state === 2 ) ;
if ( ch === SPACE || ch === LF || ch === CR ) {
maybeEIPos = stream . pos ;
// Let's check the next `n` bytes are ASCII... just be sure.
// Let's check that th e next `n` bytes are ASCII... just to be sure.
let followingBytes = stream . peekBytes ( n ) ;
for ( let i = 0 ; i < n ; i ++ ) {
for ( let i = 0 , ii = followingBytes . length ; i < ii ; i ++ ) {
ch = followingBytes [ i ] ;
if ( ch === NUL && followingBytes [ i + 1 ] !== NUL ) {
// NUL bytes are not supposed to occur *outside* of inline
// images, but some PDF generators violate that assumption,
// thus breaking the EI detection heuristics used below.
//
// However, we can't unconditionally treat NUL bytes as "ASCII",
// since that *could* result in inline images being truncated.
//
// To attempt to address this, we'll still treat any *sequence*
// of NUL bytes as non-ASCII, but for a *single* NUL byte we'll
// continue checking the `followingBytes` (fixes issue8823.pdf).
continue ;
}
if ( ch !== LF && ch !== CR && ( ch < SPACE || ch > 0x7F ) ) {
// Not a LF, CR, SPACE or any visible ASCII character, i.e.
// it's binary stuff. Resetting the state.