From bcc085ec52569eef7501ad0ad381715c3aedc2c2 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Wed, 10 Jul 2013 09:52:37 -0700 Subject: [PATCH] Limit image size to 1024*1024 for b2g. --- extensions/b2g/viewer.html | 1 - src/api.js | 10 +++++++++- src/evaluator.js | 13 +++++++++++++ src/worker.js | 3 +++ web/viewer.js | 1 + 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/extensions/b2g/viewer.html b/extensions/b2g/viewer.html index f3c6ea5a5..d39ed5724 100644 --- a/extensions/b2g/viewer.html +++ b/extensions/b2g/viewer.html @@ -25,7 +25,6 @@ limitations under the License. - diff --git a/src/api.js b/src/api.js index 1d0bf133c..c1ab09d95 100644 --- a/src/api.js +++ b/src/api.js @@ -21,6 +21,13 @@ 'use strict'; +/** + * The maximum allowed image size in total pixels e.g. width * height. Images + * above this value will not be drawn. Use -1 for no limit. + * @var {Number} + */ +PDFJS.maxImageSize = PDFJS.maxImageSize === undefined ? -1 : PDFJS.maxImageSize; + /** * This is the main entry point for loading a PDF and interacting with it. * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR) @@ -760,7 +767,8 @@ var WorkerTransport = (function WorkerTransportClosure() { source.chunkedViewerLoading = !!this.pdfDataRangeTransport; this.messageHandler.send('GetDocRequest', { source: source, - disableRange: PDFJS.disableRange + disableRange: PDFJS.disableRange, + maxImageSize: PDFJS.maxImageSize }); }, diff --git a/src/evaluator.js b/src/evaluator.js index 33674d085..b3de3b102 100644 --- a/src/evaluator.js +++ b/src/evaluator.js @@ -234,6 +234,11 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { var w = dict.get('Width', 'W'); var h = dict.get('Height', 'H'); + if (PDFJS.maxImageSize !== -1 && w * h > PDFJS.maxImageSize) { + warn('Image exceeded maximum allowed size and was removed.'); + return null; + } + var dependencies = {}; var retData = { dependencies: dependencies @@ -706,6 +711,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { } else if ('Image' == type.name) { var data = self.buildPaintImageXObject( resources, xobj, false); + if (!data) { + args = []; + continue; + } Util.extendObj(dependencies, data.dependencies); self.insertDependencies(queue, data.dependencies); fn = data.fn; @@ -720,6 +729,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { } else if (cmd == 'EI') { var data = self.buildPaintImageXObject( resources, args[0], true); + if (!data) { + args = []; + continue; + } Util.extendObj(dependencies, data.dependencies); self.insertDependencies(queue, data.dependencies); fn = data.fn; diff --git a/src/worker.js b/src/worker.js index a312643a2..9b12a2ff1 100644 --- a/src/worker.js +++ b/src/worker.js @@ -307,6 +307,9 @@ var WorkerMessageHandler = { } }; + PDFJS.maxImageSize = data.maxImageSize === undefined ? + -1 : data.maxImageSize; + getPdfManager(data).then(function pdfManagerReady() { loadDocument(false).then(onSuccess, function loadFailure(ex) { // Try again with recoveryMode == true diff --git a/web/viewer.js b/web/viewer.js index 9ac2f5a95..192234271 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -3201,6 +3201,7 @@ window.addEventListener('afterprint', function afterPrint(evt) { //#if B2G //window.navigator.mozSetMessageHandler('activity', function(activity) { // var url = activity.source.data.url; +// PDFJS.maxImageSize = 1024 * 1024; // PDFView.open(url); // var cancelButton = document.getElementById('activityClose'); // cancelButton.addEventListener('click', function() {