Forráskód Böngészése

Fixed order of the appended string array scope wrappers

sanex 4 éve
szülő
commit
b152e7bd09

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/index.browser.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/index.cli.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/index.js


+ 8 - 3
src/node-transformers/string-array-transformers/StringArrayTransformer.ts

@@ -353,9 +353,14 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
             }
             }
 
 
             const {encoding, names} = stringArrayScopeCallsWrapperData;
             const {encoding, names} = stringArrayScopeCallsWrapperData;
-
-            // iterates over each name of scope wrapper name
-            for (const stringArrayScopeCallsWrapperName of names) {
+            const namesLength: number = names.length;
+
+            /**
+             * 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 upperStringArrayCallsWrapperName: string = this.getUpperStringArrayCallsWrapperName(encoding);
 
 
                 const stringArrayScopeCallsWrapperNode: ICustomNode<TInitialData<StringArrayScopeCallsWrapperNode>> =
                 const stringArrayScopeCallsWrapperNode: ICustomNode<TInitialData<StringArrayScopeCallsWrapperNode>> =

+ 10 - 2
test/dev/dev.ts

@@ -8,7 +8,15 @@ import { IdentifierNamesGenerator } from '../../src/enums/generators/identifier-
 
 
     let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
     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,
             ...NO_ADDITIONAL_NODES_PRESET,
@@ -19,7 +27,7 @@ import { IdentifierNamesGenerator } from '../../src/enums/generators/identifier-
             transformObjectKeys: true,
             transformObjectKeys: true,
             stringArrayThreshold: 1,
             stringArrayThreshold: 1,
             stringArrayWrappersChainedCalls: false,
             stringArrayWrappersChainedCalls: false,
-            stringArrayWrappersCount: 1
+            stringArrayWrappersCount: 2
         }
         }
     ).getObfuscatedCode();
     ).getObfuscatedCode();
 
 

+ 64 - 0
test/functional-tests/node-transformers/string-array-transformers/string-array-transformer/StringArrayTransformer.spec.ts

@@ -129,6 +129,37 @@ describe('StringArrayTransformer', function () {
                     assert.match(obfuscatedCode, stringArrayCallRegExp);
                     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', () => {
         describe('Variant #2: function scope', () => {
@@ -196,6 +227,39 @@ describe('StringArrayTransformer', function () {
                     assert.match(obfuscatedCode, stringArrayCallRegExp);
                     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', () => {
         describe('Variant #3: prohibited scopes', () => {

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott