Fixed order of the appended string array scope wrappers

This commit is contained in:
sanex
2020-09-12 14:16:19 +03:00
parent 09e89f8fe6
commit b152e7bd09
6 changed files with 84 additions and 7 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
@@ -353,9 +353,14 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
}
const {encoding, names} = stringArrayScopeCallsWrapperData;
const namesLength: number = names.length;
// iterates over each name of scope wrapper name
for (const stringArrayScopeCallsWrapperName of names) {
/**
* Iterates over each name of scope wrapper name
* Reverse iteration appends wrappers at index `0` at the correct order
*/
for (let i = namesLength - 1; i >= 0; i--) {
const stringArrayScopeCallsWrapperName: string = names[i];
const upperStringArrayCallsWrapperName: string = this.getUpperStringArrayCallsWrapperName(encoding);
const stringArrayScopeCallsWrapperNode: ICustomNode<TInitialData<StringArrayScopeCallsWrapperNode>> =
+10 -2
View File
@@ -8,7 +8,15 @@ import { IdentifierNamesGenerator } from '../../src/enums/generators/identifier-
let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
`
[].map(v => 'vvv');
const foo = 'foo'
const bar = 'bar';
const baz = 'baz';
function test () {
const bark = 'bark'
const hawk = 'hawk';
const eagle = 'eagle';
}
`,
{
...NO_ADDITIONAL_NODES_PRESET,
@@ -19,7 +27,7 @@ import { IdentifierNamesGenerator } from '../../src/enums/generators/identifier-
transformObjectKeys: true,
stringArrayThreshold: 1,
stringArrayWrappersChainedCalls: false,
stringArrayWrappersCount: 1
stringArrayWrappersCount: 2
}
).getObfuscatedCode();
@@ -129,6 +129,37 @@ describe('StringArrayTransformer', function () {
assert.match(obfuscatedCode, stringArrayCallRegExp);
});
});
describe('Variant #3: correct wrappers order', () => {
const stringArrayCallRegExp: RegExp = new RegExp(
'const f *= *b;' +
'const g *= *b;' +
'const foo *= *[f|g]\\(\'0x0\'\\);' +
'const bar *= *[f|g]\\(\'0x1\'\\);' +
'const baz *= *[f|g]\\(\'0x2\'\\);'
);
let obfuscatedCode: string;
before(() => {
const code: string = readFileAsString(__dirname + '/fixtures/string-array-wrappers-count-const.js');
obfuscatedCode = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET,
identifierNamesGenerator: IdentifierNamesGenerator.MangledIdentifierNamesGenerator,
stringArray: true,
stringArrayThreshold: 1,
stringArrayWrappersCount: 2
}
).getObfuscatedCode();
});
it('should add scope calls wrappers', () => {
assert.match(obfuscatedCode, stringArrayCallRegExp);
});
});
});
describe('Variant #2: function scope', () => {
@@ -196,6 +227,39 @@ describe('StringArrayTransformer', function () {
assert.match(obfuscatedCode, stringArrayCallRegExp);
});
});
describe('Variant #3: correct wrappers order', () => {
const stringArrayCallRegExp: RegExp = new RegExp(
'function test *\\( *\\) *{' +
'const h *= *b;' +
'const i *= *b;' +
'const c *= *[h|i]\\(\'0x3\'\\);' +
'const d *= *[h|i]\\(\'0x4\'\\);' +
'const e *= *[h|i]\\(\'0x5\'\\);' +
'}'
);
let obfuscatedCode: string;
before(() => {
const code: string = readFileAsString(__dirname + '/fixtures/string-array-wrappers-count-const.js');
obfuscatedCode = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET,
identifierNamesGenerator: IdentifierNamesGenerator.MangledIdentifierNamesGenerator,
stringArray: true,
stringArrayThreshold: 1,
stringArrayWrappersCount: 2
}
).getObfuscatedCode();
});
it('should add scope calls wrappers', () => {
assert.match(obfuscatedCode, stringArrayCallRegExp);
});
});
});
describe('Variant #3: prohibited scopes', () => {