소스 검색

Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/569

sanex3339 5 년 전
부모
커밋
39870010e8

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 Change Log
 
+v0.25.4
+---
+* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/569
+
 v0.25.3
 ---
 * Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/568

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/index.browser.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/index.cli.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/index.js


+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "javascript-obfuscator",
-  "version": "0.25.3",
+  "version": "0.25.4",
   "description": "JavaScript obfuscator",
   "keywords": [
     "obfuscator",

+ 2 - 2
src/analyzers/scope-analyzer/ScopeAnalyzer.ts

@@ -49,8 +49,8 @@ export class ScopeAnalyzer implements IScopeAnalyzer {
             enter: (node: ESTree.Node): ESTree.Node => {
                 if (!node.range) {
                     node.range = [
-                        ScopeAnalyzer.emptyRangeValue,
-                        ScopeAnalyzer.emptyRangeValue
+                        node.parentNode?.range?.[0] ?? ScopeAnalyzer.emptyRangeValue,
+                        node.parentNode?.range?.[1] ?? ScopeAnalyzer.emptyRangeValue
                     ];
                 }
 

+ 2 - 0
src/node-transformers/converting-transformers/object-expression-extractors/BasePropertiesExtractor.ts

@@ -11,6 +11,7 @@ import { NodeAppender } from '../../../node/NodeAppender';
 import { NodeFactory } from '../../../node/NodeFactory';
 import { NodeGuards } from '../../../node/NodeGuards';
 import { NodeStatementUtils } from '../../../node/NodeStatementUtils';
+import { NodeUtils } from '../../../node/NodeUtils';
 
 @injectable()
 export class BasePropertiesExtractor implements IObjectExpressionExtractor {
@@ -110,6 +111,7 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
 
         this.filterExtractedObjectExpressionProperties(objectExpressionNode, removablePropertyIds);
         NodeAppender.insertAfter(hostNodeWithStatements, expressionStatements, hostStatement);
+        NodeUtils.parentizeAst(hostNodeWithStatements);
 
         return {
             nodeToReplace: objectExpressionNode,

+ 6 - 0
src/node/NodeUtils.ts

@@ -89,10 +89,16 @@ export class NodeUtils {
      * @returns {T}
      */
     public static parentizeAst <T extends ESTree.Node = ESTree.Node> (astTree: T): T {
+        const parentNode: ESTree.Node | null = astTree.parentNode ?? null;
+
         estraverse.replace(astTree, {
             enter: NodeUtils.parentizeNode
         });
 
+        if (parentNode) {
+            astTree.parentNode = parentNode;
+        }
+
         return astTree;
     }
 

+ 4 - 8
test/dev/dev.ts

@@ -7,17 +7,13 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../src/options/presets/NoCustomNo
 
     let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
         `
-            (function(foo){
-                function foo () {
-            
-                }
-            
-                return new foo();
-            })();
+             (function () {
+                 const foo = 'foo';
+                 const bar = { [foo]: 'bar' };
+             })();
         `,
         {
             ...NO_ADDITIONAL_NODES_PRESET,
-            identifierNamesGenerator: 'mangled',
             transformObjectKeys: true,
             compact: false
         }

+ 28 - 0
test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts

@@ -1792,5 +1792,33 @@ describe('ObjectExpressionKeysTransformer', () => {
                 assert.match(obfuscatedCode,  regExp);
             });
         });
+
+        describe('Variant #10: computed property key name', () => {
+            const match: string = `` +
+                `const ${variableMatch} *= *'foo';` +
+                `const ${variableMatch} *= *{};` +
+                `${variableMatch}\\[${variableMatch}] *= *'bar';` +
+                `const ${variableMatch} *= *${variableMatch};` +
+            ``;
+            const regExp: RegExp = new RegExp(match);
+
+            let obfuscatedCode: string;
+
+            before(() => {
+                const code: string = readFileAsString(__dirname + '/fixtures/computed-key-1.js');
+
+                obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                    code,
+                    {
+                        ...NO_ADDITIONAL_NODES_PRESET,
+                        transformObjectKeys: true
+                    }
+                ).getObfuscatedCode();
+            });
+
+            it('should correctly generate name for the computed key identifier', () => {
+                assert.match(obfuscatedCode,  regExp);
+            });
+        });
     });
 });

+ 4 - 0
test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/computed-key-1.js

@@ -0,0 +1,4 @@
+(function () {
+    const foo = 'foo';
+    const bar = { [foo]: 'bar' };
+})();

+ 23 - 0
test/unit-tests/node/node-utils/NodeUtils.spec.ts

@@ -282,6 +282,29 @@ describe('NodeUtils', () => {
                 assert.deepEqual(expressionStatementNode2.parentNode, ifStatementBlockStatementNode);
             });
         });
+
+        describe('Variant #3: parentize AST-tree and keep root node parent node', () => {
+            beforeEach(() => {
+                programNode = NodeFactory.programNode([
+                    ifStatementNode
+                ]);
+
+                ifStatementNode.parentNode = programNode;
+                ifStatementNode = NodeUtils.parentizeAst(ifStatementNode);
+            });
+
+            it('should parentize `ifStatement` node', () => {
+                assert.deepEqual(ifStatementNode.parentNode, programNode);
+            });
+
+            it('should parentize `ifStatement blockStatement` node', () => {
+                assert.deepEqual(ifStatementBlockStatementNode.parentNode, ifStatementNode);
+            });
+
+            afterEach(() => {
+                ifStatementNode.parentNode = undefined;
+            });
+        });
     });
 
     describe('parentizeNode', () => {

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.