From 4f4f95b73fd5c56053f82a0c21ef1007ed8d6ea2 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Wed, 17 Jan 2018 00:22:43 +0300 Subject: [PATCH] Added test for dead code identifiers conflict --- .../DeadCodeInjectionTransformer.spec.ts | 45 +++++++++++++++++++ .../unique-names-for-dead-code-identifiers.js | 21 +++++++++ 2 files changed, 66 insertions(+) create mode 100644 test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/unique-names-for-dead-code-identifiers.js diff --git a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts index ce1a5fc1..10d9319e 100644 --- a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts @@ -4,6 +4,9 @@ import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResul import { NO_ADDITIONAL_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; +import { IdentifierNamesGenerator } from '../../../../src/enums/generators/identifier-names-generators/IdentifierNamesGenerator'; + +import { getRegExpMatch } from '../../../helpers/getRegExpMatch'; import { readFileAsString } from '../../../helpers/readFileAsString'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscatorFacade'; @@ -436,5 +439,47 @@ describe('DeadCodeInjectionTransformer', () => { assert.notInclude(obfuscatedCode, variableName); }); }); + + describe('variant #10 - unique names for dead code identifiers', () => { + const deadCodeMatch: string = `` + + `if *\\(.*?\\) *{` + + `var *(\\w).*?;` + + `} *else *{` + + `return *(\\w).*?;` + + `}` + + ``; + const deadCodeRegExp: RegExp = new RegExp(deadCodeMatch); + + let returnIdentifierName: string | null, + variableDeclarationIdentifierName: string | null, + obfuscatedCode: string; + + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/unique-names-for-dead-code-identifiers.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + deadCodeInjection: true, + deadCodeInjectionThreshold: 1, + identifierNamesGenerator: IdentifierNamesGenerator.MangledIdentifierNamesGenerator, + seed: 1 + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + variableDeclarationIdentifierName = getRegExpMatch(obfuscatedCode, deadCodeRegExp, 0); + returnIdentifierName = getRegExpMatch(obfuscatedCode, deadCodeRegExp, 1); + }); + + it('should correctly add dead code', () => { + assert.match(obfuscatedCode, deadCodeRegExp); + }); + + it('should generate separate identifiers for common AST and dead code', () => { + assert.notEqual(returnIdentifierName, variableDeclarationIdentifierName); + }); + }); }); }); diff --git a/test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/unique-names-for-dead-code-identifiers.js b/test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/unique-names-for-dead-code-identifiers.js new file mode 100644 index 00000000..34ed7a92 --- /dev/null +++ b/test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/unique-names-for-dead-code-identifiers.js @@ -0,0 +1,21 @@ +(function(variable){ + function foo () { + return variable.push(1); + } + + function bar () { + var variable = 1; + } + + function baz() { + var variable = 2; + } + + function bark() { + var variable = 3; + } + + function hawk() { + var variable = 4; + } +})([]); \ No newline at end of file