From 015d26da944de26e68216815f1923a95ca31ffe1 Mon Sep 17 00:00:00 2001 From: ben Date: Thu, 3 Aug 2017 20:17:26 -0600 Subject: [PATCH 1/2] Fixed issue #95. --- src/utils.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/utils.js b/src/utils.js index ce68e50a..5c7a9801 100644 --- a/src/utils.js +++ b/src/utils.js @@ -87,6 +87,8 @@ var varStr = 'var %d = Date.now();\n'; var checkStr = '\nif (Date.now() - %d > 1000) { window.top.previewException(new Error("Infinite loop")); break;}\n'; + var infoForEachLoop = []; + var popupStatements = []; esprima.parse(code, { tolerant: true, range: true, jsx: true }, function( node @@ -109,6 +111,8 @@ --start; } + infoForEachLoop.push({start: start, end: end, varName: varPrefix + loopId}); + patches.push({ pos: start, str: prolog }); patches.push({ pos: end, str: epilog }); patches.push({ @@ -118,11 +122,34 @@ ++loopId; break; + case 'ExpressionStatement': + [ + "alert", + "confirm", + "prompt" + ].forEach(function(functionName){ + if (node.expression.callee.name === functionName || (node.expression.callee.hasOwnProperty("object") && node.expression.callee.object.name === 'window' && node.expression.callee.property.name === functionName)){ + popupStatements.push(node); + } + }); + break; + default: break; } }); + popupStatements.forEach(function(node){ + infoForEachLoop.forEach(function(loop){ + if (node.range[0]>=loop.start && node.range[0]<=loop.end){ + patches.push({ + pos: node.range[1], + str: '\n%d = Date.now();\n'.replace('%d', loop.varName) + }); + } + }); + }); + /* eslint-disable no-param-reassign */ patches .sort(function(a, b) { From 24d5550738c217a1e899d1ee687d92246d657b66 Mon Sep 17 00:00:00 2001 From: Ben Jamison Date: Sat, 11 Nov 2017 16:35:38 -0700 Subject: [PATCH 2/2] Fixed style errors. --- src/utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils.js b/src/utils.js index 5c7a9801..523021a1 100644 --- a/src/utils.js +++ b/src/utils.js @@ -111,7 +111,7 @@ --start; } - infoForEachLoop.push({start: start, end: end, varName: varPrefix + loopId}); + infoForEachLoop.push({ start: start, end: end, varName: varPrefix + loopId }); patches.push({ pos: start, str: prolog }); patches.push({ pos: end, str: epilog }); @@ -128,7 +128,7 @@ "confirm", "prompt" ].forEach(function(functionName){ - if (node.expression.callee.name === functionName || (node.expression.callee.hasOwnProperty("object") && node.expression.callee.object.name === 'window' && node.expression.callee.property.name === functionName)){ + if (node.expression.callee.name === functionName || (Object.prototype.hasOwnProperty.call(node.expression.callee, "object") && node.expression.callee.object.name === 'window' && node.expression.callee.property.name === functionName)){ popupStatements.push(node); } });