Skip to content

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

@vandrieu

Description

@vandrieu
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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions