From 2779bab03eb4a64e34855b6c8dbbd6d7a2939230 Mon Sep 17 00:00:00 2001 From: Rob Wu Date: Sat, 25 Jan 2014 18:04:33 +0100 Subject: [PATCH] Use [].forEach instead of for-..-in in evaluator To prevent errors whenever the array's prototype is extended. (cmap is an array) --- src/core/evaluator.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 5d0ccb69e..fa8787632 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -909,8 +909,9 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { } else if (isStream(cmapObj)) { var cmap = CMapFactory.create(cmapObj).map; // Convert UTF-16BE - for (var i in cmap) { - var token = cmap[i]; + // NOTE: cmap can be a sparse array, so use forEach instead of for(;;) + // to iterate over all keys. + cmap.forEach(function(token, i) { var str = []; for (var k = 0; k < token.length; k += 2) { var w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1); @@ -923,7 +924,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); } cmap[i] = String.fromCharCode.apply(String, str); - } + }); return cmap; } return charToUnicode;