Merge pull request #5187 from nnethercote/EI-checking

Reduce ASCII checks in makeInlineImage().
This commit is contained in:
Yury Delendik 2014-08-15 08:29:03 -05:00
commit 992e7613c1

View File

@ -18,7 +18,7 @@
FlateStream, isArray, isCmd, isDict, isInt, isName, isNum, isRef, FlateStream, isArray, isCmd, isDict, isInt, isName, isNum, isRef,
isString, Jbig2Stream, JpegStream, JpxStream, LZWStream, Name, isString, Jbig2Stream, JpegStream, JpxStream, LZWStream, Name,
NullStream, PredictorStream, Ref, RunLengthStream, warn, info, NullStream, PredictorStream, Ref, RunLengthStream, warn, info,
StreamType, MissingDataException */ StreamType, MissingDataException, assert */
'use strict'; 'use strict';
@ -152,32 +152,33 @@ var Parser = (function ParserClosure() {
// searching for the /EI\s/ // searching for the /EI\s/
var state = 0, ch, i, ii; var state = 0, ch, i, ii;
while (state !== 4 && (ch = stream.getByte()) !== -1) { var E = 0x45, I = 0x49, SPACE = 0x20, NL = 0xA, CR = 0xD;
switch (ch | 0) { while ((ch = stream.getByte()) !== -1) {
case 0x20: if (state === 0) {
case 0x0D: state = (ch === E) ? 1 : 0;
case 0x0A: } else if (state === 1) {
// let's check next five bytes to be ASCII... just be sure state = (ch === I) ? 2 : 0;
var followingBytes = stream.peekBytes(5); } else {
for (i = 0, ii = followingBytes.length; i < ii; i++) { assert(state === 2);
if (ch === SPACE || ch === NL || ch === CR) {
// Let's check the next five bytes are ASCII... just be sure.
var n = 5;
var followingBytes = stream.peekBytes(n);
for (i = 0; i < n; i++) {
ch = followingBytes[i]; ch = followingBytes[i];
if (ch !== 0x0A && ch !== 0x0D && (ch < 0x20 || ch > 0x7F)) { if (ch !== NL && ch !== CR && (ch < SPACE || ch > 0x7F)) {
// not a LF, CR, SPACE or any visible ASCII character // Not a LF, CR, SPACE or any visible ASCII character, i.e.
// it's binary stuff. Resetting the state.
state = 0; state = 0;
break; // some binary stuff found, resetting the state break;
} }
} }
state = (state === 3 ? 4 : 0); if (state === 2) {
break; break; // finished!
case 0x45: }
state = 2; } else {
break;
case 0x49:
state = (state === 2 ? 3 : 0);
break;
default:
state = 0; state = 0;
break; }
} }
} }