Ver código fonte

Do not rename parent function with same name

5 anos atrás
pai
commit
d8b24c166d

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/index.browser.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/index.cli.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/index.js


+ 1 - 0
src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts

@@ -173,6 +173,7 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer {
             enter: (node: ESTree.Node, parentNode: ESTree.Node | null): void => {
                 if (
                     parentNode
+                    && (parentNode !== lexicalScopeNode)
                     && NodeGuards.isReplaceableIdentifierNode(node, parentNode)
                     && !NodeMetadata.isRenamedIdentifier(node)
                 ) {

+ 9 - 0
test/functional-tests/issues/fixtures/issue321.js

@@ -0,0 +1,9 @@
+function e() {
+    function e() {
+    }
+    e();
+}
+
+(function() {
+    e();
+})();

+ 32 - 0
test/functional-tests/issues/issue321.spec.ts

@@ -0,0 +1,32 @@
+import { assert } from 'chai';
+import { NO_ADDITIONAL_NODES_PRESET } from '../../../src/options/presets/NoCustomNodes';
+import { readFileAsString } from '../../helpers/readFileAsString';
+import { JavaScriptObfuscator } from '../../../src/JavaScriptObfuscatorFacade';
+
+//
+// https://github.com/javascript-obfuscator/javascript-obfuscator/issues/321
+//
+describe('Issue #321', () => {
+
+    describe('Fixture code should nor break', () => {
+        let obfuscatedCode: string;
+
+        before(() => {
+            const code: string = readFileAsString(__dirname + '/fixtures/issue321.js');
+
+            obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                code,
+                {
+                    ...NO_ADDITIONAL_NODES_PRESET,
+                    stringArray: false,
+                    renameGlobals: true
+                }
+            ).getObfuscatedCode();
+
+        });
+
+        it('does not break on run', () => {
+            assert.doesNotThrow(() => eval(obfuscatedCode));
+        });
+    });
+});

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff