Javascript-obfuscator: transformObjectKeys=true causes obfuscator to crash with "TypeError: Cannot read property 'type' of undefined" if input code contains object spread operator

Created on 19 Nov 2019  路  6Comments  路  Source: javascript-obfuscator/javascript-obfuscator

var JavaScriptObfuscator = require('javascript-obfuscator');

var obfuscationResult = JavaScriptObfuscator.obfuscate(
    `
        var obj1={
        firstname:'John',
        lastname:'Smith'
    };
    var obj2={
        age:40,
        country:'USA'
    }
    var user={...obj1, ...obj2}
    console.log(user);

    `,
    {
        transformObjectKeys: true,
    }
);

console.log(obfuscationResult.getObfuscatedCode());

Expected Behavior

The normal ouput of this program is:

{firstname: "John", lastname: "Smith", age: 40, country: "USA"}

Current Behavior

The current behavior is:

/Users/vincent/dev/packager/node_modules/javascript-obfuscator/dist/webpack:/JavaScriptObfuscator/src/node/NodeGuards.ts:270
        return node.type === NodeType.ObjectPattern;
                    ^
TypeError: Cannot read property 'type' of undefined
    at Function.type (/Users/vincent/dev/packager/node_modules/javascript-obfuscator/dist/webpack:/JavaScriptObfuscator/src/node/NodeGuards.ts:270:21)
    at Function.isObjectPatternNode (/Users/vincent/dev/packager/node_modules/javascript-obfuscator/dist/webpack:/JavaScriptObfuscator/src/node-transformers/converting-transformers/properties-extractors/AbstractPropertiesExtractor.ts:86:27)
    at t.isProhibitedPattern (/Users/vincent/dev/packager/node_modules/javascript-obfuscator/dist/webpack:/JavaScriptObfuscator/src/node-transformers/converting-transformers/properties-extractors/AbstractPropertiesExtractor.ts:120:45)
    at t.extractPropertiesToExpressionStatements (/Users/vincent/dev/packager/node_modules/javascript-obfuscator/dist/webpack:/JavaScriptObfuscator/src/node-transformers/converting-transformers/properties-extractors/AbstractPropertiesExtractor.ts:187:14)
    at transformObjectExpressionNode (/Users/vincent/dev/packager/node_modules/javascript-obfuscator/dist/webpack:/JavaScriptObfuscator/src/node-transformers/converting-transformers/properties-extractors/VariableDeclaratorPropertiesExtractor.ts:42:21)
    at t.extract (/Users/vincent/dev/packager/node_modules/javascript-obfuscator/dist/webpack:/JavaScriptObfuscator/src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts:104:36)
    at transformNode (/Users/vincent/dev/packager/node_modules/javascript-obfuscator/dist/webpack:/JavaScriptObfuscator/src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts:67:33)
    at Controller.visitorFunction (/Users/vincent/dev/packager/node_modules/javascript-obfuscator/dist/webpack:/JavaScriptObfuscator/src/node-transformers/TransformersRunner.ts:111:55)
    at Controller.__execute (/Users/vincent/dev/packager/node_modules/estraverse/estraverse.js:397:31)
    at Controller.replace (/Users/vincent/dev/packager/node_modules/estraverse/estraverse.js:637:27)

Steps to Reproduce (for bugs)

  1. create a file with the above code in a npm project
  2. run the code
  3. bug occurs

Your Environment

No related to environment, even on https://obfuscator.io/ it happens as well, the website does not obfuscate the code and displays TypeError: Cannot read property 'type' of undefined

Stack trace

See 'Current Behavior' section

Minimal working example that will help to reproduce issue

See code sample at top of bug report

Other notes

array spread operator like [...arr1, ...arr2] does not create this problem, only {...obj1, ...obj2} does.

Most helpful comment

The bug is fixed by PR above.

All 6 comments

Can you check this problem on version 0.18.1 ?

Can you check this problem on version 0.18.1 ?

same error

The bug is fixed by PR above.

Thank you! I will look into this tomorrow. Expect release with fix tomorrow.

0.18.4 version released.

@zamotkin thank you for the fixes

Was this page helpful?
0 / 5 - 0 ratings

Related issues

elderapo picture elderapo  路  3Comments

djunique picture djunique  路  3Comments

olOwOlo picture olOwOlo  路  3Comments

slig picture slig  路  8Comments

psabharwal123 picture psabharwal123  路  7Comments