mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-25 09:38:06 +02:00
Use Dict_getArray
in more places in src/core/
to avoid issues when Arrays contain indirect objects
As evident from e.g. PRs 6485 and 7118, some bad PDF generators unfortunately create Arrays where *some* elements are indirect objects (i.e. `Ref`s). This seems to mostly affect Arrays that contain numbers, such as e.g. `Matrix/FontMatrix/BBox/FontBBox/Rect/Color/...`, and has manifested itself in PDF files that fail to render correctly (some elements are missing). The problem in both the cases above, besides broken rendering, was that there were *no* errors/warnings that indicated what the problem was, making it difficult to pinpoint the issue. Hence this patch, where I've audited all usages of `Dict_get` in `src/core/` files, and replaced it with `Dict_getArray` where appropriate to try and prevent unnecessary future bugs.
This commit is contained in:
parent
8adddf031c
commit
6111c17c8a
8 changed files with 47 additions and 47 deletions
|
@ -926,7 +926,7 @@ var JpegStream = (function JpegStreamClosure() {
|
|||
|
||||
// checking if values needs to be transformed before conversion
|
||||
if (this.forceRGB && this.dict && isArray(this.dict.get('Decode'))) {
|
||||
var decodeArr = this.dict.get('Decode');
|
||||
var decodeArr = this.dict.getArray('Decode');
|
||||
var bitsPerComponent = this.dict.get('BitsPerComponent') || 8;
|
||||
var decodeArrLength = decodeArr.length;
|
||||
var transform = new Int32Array(decodeArrLength);
|
||||
|
@ -1066,8 +1066,8 @@ var Jbig2Stream = (function Jbig2StreamClosure() {
|
|||
|
||||
var jbig2Image = new Jbig2Image();
|
||||
|
||||
var chunks = [], xref = this.dict.xref;
|
||||
var decodeParams = xref.fetchIfRef(this.dict.get('DecodeParms'));
|
||||
var chunks = [];
|
||||
var decodeParams = this.dict.getArray('DecodeParms');
|
||||
|
||||
// According to the PDF specification, DecodeParms can be either
|
||||
// a dictionary, or an array whose elements are dictionaries.
|
||||
|
@ -1076,7 +1076,7 @@ var Jbig2Stream = (function Jbig2StreamClosure() {
|
|||
warn('JBIG2 - \'DecodeParms\' array with multiple elements ' +
|
||||
'not supported.');
|
||||
}
|
||||
decodeParams = xref.fetchIfRef(decodeParams[0]);
|
||||
decodeParams = decodeParams[0];
|
||||
}
|
||||
if (decodeParams && decodeParams.has('JBIG2Globals')) {
|
||||
var globalsStream = decodeParams.get('JBIG2Globals');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue