瀏覽代碼

fixed functionObfuscator runtime regression error

sanex3339 8 年之前
父節點
當前提交
1271de0b3a
共有 3 個文件被更改,包括 15 次插入13 次删除
  1. 7 5
      dist/index.js
  2. 6 2
      src/node-transformers/node-obfuscators/FunctionObfuscator.ts
  3. 2 6
      src/node/NodeUtils.ts

+ 7 - 5
dist/index.js

@@ -287,11 +287,9 @@ var NodeUtils = function () {
                 if (!parentNode.parentNode) {
                     throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`');
                 }
-                if (!NodeUtils.nodesWithBlockScope.includes(parentNode.parentNode.type)) {
-                    return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes);
+                if (NodeUtils.nodesWithBlockScope.includes(parentNode.parentNode.type)) {
+                    blockScopes.push(parentNode);
                 }
-                blockScopes.push(parentNode);
-                return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes);
             }
             if (!Node_1.Node.isProgramNode(parentNode)) {
                 return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes);
@@ -5012,7 +5010,7 @@ var FunctionObfuscator = function (_AbstractNodeTransfor) {
         value: function replaceFunctionParams(functionNode, nodeIdentifier) {
             var _this3 = this;
 
-            estraverse.replace(functionNode, {
+            var traverseVisitor = {
                 enter: function enter(node, parentNode) {
                     if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) {
                         var newNodeName = _this3.identifierReplacer.replace(node.name, nodeIdentifier);
@@ -5022,7 +5020,11 @@ var FunctionObfuscator = function (_AbstractNodeTransfor) {
                         }
                     }
                 }
+            };
+            functionNode.params.forEach(function (paramsNode) {
+                return estraverse.replace(paramsNode, traverseVisitor);
             });
+            estraverse.replace(functionNode.body, traverseVisitor);
         }
     }]);
     return FunctionObfuscator;

+ 6 - 2
src/node-transformers/node-obfuscators/FunctionObfuscator.ts

@@ -74,7 +74,7 @@ export class FunctionObfuscator extends AbstractNodeTransformer {
      * @param nodeIdentifier
      */
     private replaceFunctionParams (functionNode: ESTree.Function, nodeIdentifier: number): void {
-        estraverse.replace(functionNode, {
+        const traverseVisitor: estraverse.Visitor = {
             enter: (node: ESTree.Node, parentNode: ESTree.Node): any => {
                 if (Node.isReplaceableIdentifierNode(node, parentNode)) {
                     const newNodeName: string = this.identifierReplacer.replace(node.name, nodeIdentifier);
@@ -85,6 +85,10 @@ export class FunctionObfuscator extends AbstractNodeTransformer {
                     }
                 }
             }
-        });
+        };
+
+        functionNode.params.forEach((paramsNode: ESTree.Node) => estraverse.replace(paramsNode, traverseVisitor));
+
+        estraverse.replace(functionNode.body, traverseVisitor);
     }
 }

+ 2 - 6
src/node/NodeUtils.ts

@@ -102,13 +102,9 @@ export class NodeUtils {
                 throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`');
             }
 
-            if (!NodeUtils.nodesWithBlockScope.includes(parentNode.parentNode.type)) {
-                return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes);
+            if (NodeUtils.nodesWithBlockScope.includes(parentNode.parentNode.type)) {
+                blockScopes.push(parentNode);
             }
-
-            blockScopes.push(parentNode);
-
-            return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes);
         }
 
         if (!Node.isProgramNode(parentNode)) {