From 532d7246ea1b67f5b9752f6b3a2c3dbf2c09c9c6 Mon Sep 17 00:00:00 2001 From: Fabian Lange Date: Tue, 10 Jun 2014 11:29:25 +0200 Subject: [PATCH] add object id to streams to prevent infinite loops. fixes http://bugzil.la/1020858 --- src/core/evaluator.js | 7 +++++++ src/core/obj.js | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/evaluator.js b/src/core/evaluator.js index ccfa138e9..37880c025 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -100,6 +100,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { if (!isStream(xObject)) { continue; } + if (xObject.dict.objId) { + if (processed[xObject.dict.objId]) { + // stream has objId and is processed already + continue; + } + processed[xObject.dict.objId] = true; + } var xResources = xObject.dict.get('Resources'); // Checking objId to detect an infinite loop. if (isDict(xResources) && diff --git a/src/core/obj.js b/src/core/obj.js index 879b7f098..858e006f4 100644 --- a/src/core/obj.js +++ b/src/core/obj.js @@ -1175,9 +1175,10 @@ var XRef = (function XRefClosure() { } else { xrefEntry = this.fetchCompressed(xrefEntry, suppressEncryption); } - - if (isDict(xrefEntry)) { + if (isDict(xrefEntry)){ xrefEntry.objId = 'R' + ref.num + '.' + ref.gen; + } else if (isStream(xrefEntry)) { + xrefEntry.dict.objId = 'R' + ref.num + '.' + ref.gen; } return xrefEntry; },