Browse Source

Merge pull request #4971 from yurydelendik/rm-suppressEncryption

Removes error catch from fetchUncompressed()
Yury Delendik 11 years ago
parent
commit
c0a6b0f308
  1. 10
      src/core/obj.js
  2. 108
      src/core/parser.js

10
src/core/obj.js

@ -1216,15 +1216,7 @@ var XRef = (function XRefClosure() {
error('bad XRef entry'); error('bad XRef entry');
} }
if (this.encrypt && !suppressEncryption) { if (this.encrypt && !suppressEncryption) {
try { xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));
xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num,
gen));
} catch (ex) {
// Almost all streams must be encrypted, but sometimes
// they are not, probably due to some broken generators.
// Retrying without encryption...
return this.fetch(ref, true);
}
} else { } else {
xrefEntry = parser.getObj(); xrefEntry = parser.getObj();
} }

108
src/core/parser.js

@ -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 */ StreamType, MissingDataException */
'use strict'; 'use strict';
@ -344,58 +344,66 @@ var Parser = (function ParserClosure() {
if (stream.dict.get('Length') === 0) { if (stream.dict.get('Length') === 0) {
return new NullStream(stream); return new NullStream(stream);
} }
var xrefStreamStats = this.xref.stats.streamTypes; try {
if (name == 'FlateDecode' || name == 'Fl') { var xrefStreamStats = this.xref.stats.streamTypes;
xrefStreamStats[StreamType.FLATE] = true; if (name == 'FlateDecode' || name == 'Fl') {
if (params) { xrefStreamStats[StreamType.FLATE] = true;
return new PredictorStream(new FlateStream(stream, maybeLength), if (params) {
maybeLength, params); return new PredictorStream(new FlateStream(stream, maybeLength),
} maybeLength, params);
return new FlateStream(stream, maybeLength);
}
if (name == 'LZWDecode' || name == 'LZW') {
xrefStreamStats[StreamType.LZW] = true;
var earlyChange = 1;
if (params) {
if (params.has('EarlyChange')) {
earlyChange = params.get('EarlyChange');
} }
return new PredictorStream( return new FlateStream(stream, maybeLength);
new LZWStream(stream, maybeLength, earlyChange),
maybeLength, params);
} }
return new LZWStream(stream, maybeLength, earlyChange); if (name == 'LZWDecode' || name == 'LZW') {
} xrefStreamStats[StreamType.LZW] = true;
if (name == 'DCTDecode' || name == 'DCT') { var earlyChange = 1;
xrefStreamStats[StreamType.DCT] = true; if (params) {
return new JpegStream(stream, maybeLength, stream.dict, this.xref); if (params.has('EarlyChange')) {
} earlyChange = params.get('EarlyChange');
if (name == 'JPXDecode' || name == 'JPX') { }
xrefStreamStats[StreamType.JPX] = true; return new PredictorStream(
return new JpxStream(stream, maybeLength, stream.dict); new LZWStream(stream, maybeLength, earlyChange),
} maybeLength, params);
if (name == 'ASCII85Decode' || name == 'A85') { }
xrefStreamStats[StreamType.A85] = true; return new LZWStream(stream, maybeLength, earlyChange);
return new Ascii85Stream(stream, maybeLength); }
} if (name == 'DCTDecode' || name == 'DCT') {
if (name == 'ASCIIHexDecode' || name == 'AHx') { xrefStreamStats[StreamType.DCT] = true;
xrefStreamStats[StreamType.AHX] = true; return new JpegStream(stream, maybeLength, stream.dict, this.xref);
return new AsciiHexStream(stream, maybeLength); }
} if (name == 'JPXDecode' || name == 'JPX') {
if (name == 'CCITTFaxDecode' || name == 'CCF') { xrefStreamStats[StreamType.JPX] = true;
xrefStreamStats[StreamType.CCF] = true; return new JpxStream(stream, maybeLength, stream.dict);
return new CCITTFaxStream(stream, maybeLength, params); }
} if (name == 'ASCII85Decode' || name == 'A85') {
if (name == 'RunLengthDecode' || name == 'RL') { xrefStreamStats[StreamType.A85] = true;
xrefStreamStats[StreamType.RL] = true; return new Ascii85Stream(stream, maybeLength);
return new RunLengthStream(stream, maybeLength); }
} if (name == 'ASCIIHexDecode' || name == 'AHx') {
if (name == 'JBIG2Decode') { xrefStreamStats[StreamType.AHX] = true;
xrefStreamStats[StreamType.JBIG] = true; return new AsciiHexStream(stream, maybeLength);
return new Jbig2Stream(stream, maybeLength, stream.dict); }
if (name == 'CCITTFaxDecode' || name == 'CCF') {
xrefStreamStats[StreamType.CCF] = true;
return new CCITTFaxStream(stream, maybeLength, params);
}
if (name == 'RunLengthDecode' || name == 'RL') {
xrefStreamStats[StreamType.RL] = true;
return new RunLengthStream(stream, maybeLength);
}
if (name == 'JBIG2Decode') {
xrefStreamStats[StreamType.JBIG] = true;
return new Jbig2Stream(stream, maybeLength, stream.dict);
}
warn('filter "' + name + '" not supported yet');
return stream;
} catch (ex) {
if (ex instanceof MissingDataException) {
throw ex;
}
warn('Invalid stream: \"' + ex + '\"');
return new NullStream(stream);
} }
warn('filter "' + name + '" not supported yet');
return stream;
} }
}; };

Loading…
Cancel
Save