diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 3e0a98d46..dcba0e038 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -126,8 +126,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { xobj, smask, operatorList, initialState) { - var matrix = xobj.dict.get('Matrix'); - var bbox = xobj.dict.get('BBox'); + var matrix = xobj.dict.getArray('Matrix'); + var bbox = xobj.dict.getArray('BBox'); var group = xobj.dict.get('Group'); if (group) { var groupOptions = { diff --git a/src/core/obj.js b/src/core/obj.js index 161e8ca29..be62eab55 100644 --- a/src/core/obj.js +++ b/src/core/obj.js @@ -135,6 +135,22 @@ var Dict = (function DictClosure() { return Promise.resolve(value); }, + // Same as get(), but dereferences all elements if the result is an Array. + getArray: function Dict_getArray(key1, key2, key3) { + var value = this.get(key1, key2, key3); + if (!isArray(value)) { + return value; + } + value = value.slice(); // Ensure that we don't modify the Dict data. + for (var i = 0, ii = value.length; i < ii; i++) { + if (!isRef(value[i])) { + continue; + } + value[i] = this.xref.fetch(value[i]); + } + return value; + }, + // no dereferencing getRaw: function Dict_getRaw(key) { return this.map[key]; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 842c2d3aa..de2d8b754 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -3,6 +3,7 @@ !tracemonkey.pdf !franz.pdf +!franz_2.pdf !issue2391-1.pdf !issue2391-2.pdf !issue5801.pdf diff --git a/test/pdfs/franz_2.pdf b/test/pdfs/franz_2.pdf new file mode 100644 index 000000000..ac1219ce1 Binary files /dev/null and b/test/pdfs/franz_2.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index adbcd5ab5..834e43145 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -527,6 +527,14 @@ "type": "eq", "about": "Type1 font with |Ref|s in the Differences array of the Encoding dictionary." }, + { "id": "franz_2", + "file": "pdfs/franz_2.pdf", + "md5": "9d301ed8816e879891115b5cc3c39559", + "link": false, + "rounds": 1, + "type": "eq", + "about": "XObject with BBox array containing indirect object." + }, { "id": "issue4934", "file": "pdfs/issue4934.pdf", "md5": "6099da44f677702ae65a648b51a2226d",