Skip to content

AssignmentRestProperty does not work without AssignmentPropertyList #607

Closed

Description

@lonedone

I've created an issue as a bug as partial ECMAScript 2019 support is declared on web site.

Expected Behavior

const { ...fields } = req.body; should be obfuscated

Current Behavior

For now seems like many features of ECMAScript 2018 is supported except at least one when AssignmentRestProperty alone is used at the LeftHandSideExpression of destructuring assignment.
Example:
const { ...fields } = req.body;
Runing javascript-obfuscator against that string gives:

[javascript-obfuscator-cli] Error in file: playground/test.js... 

Although it works well when AssignmentPropertyList is present before the rest.
This string will not cause an error:
const { foo, ...fields } = req.body;

Steps to Reproduce

  1. create test.js file with a content from example below
  2. run javascript-obfuscator against it
    javascript-obfuscator ./test.js --output ./
  3. experience an error

Your Environment

  • Obfuscator version used: 0.28.1
  • Node version used: 12.13.1

Stack trace

/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2226
                if (property.value.type !== Syntax.Identifier) {
                                   ^
TypeError: Cannot read property 'type' of undefined
    at CodeGenerator.ObjectPattern (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2226:36)
    at CodeGenerator.generateExpression (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2469:28)
    at CodeGenerator.VariableDeclarator (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1438:26)
    at CodeGenerator.generateStatement (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2482:33)
    at block (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1465:38)
    at CodeGenerator.VariableDeclaration (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1483:17)
    at CodeGenerator.generateStatement (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2482:33)
    at /Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1075:51
    at withIndent (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:576:9)
    at CodeGenerator.BlockStatement (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1025:13)

Minimal working example that will help to reproduce issue

const req = {
  foo: 'foo_str',
  bar: 'bar_str',
};

const { ...fields } = req;
console.log(fields);

Activity

  1. sanex3339 commented on May 21, 2020

    @sanex3339
    Member

    This is a bug in escodegen
    If you changes it to

    const { foo, ...fields } = req;
    

    it will work

  2. sanex3339 commented on May 30, 2020

    @sanex3339
    Member

    I created PR with fix some time ago. Please ping this PR
    estools/escodegen#408

  3. lonedone commented on May 30, 2020

    @lonedone
    Author

    thx, just mailed maintainer.

  4. sanex3339 commented on Jun 4, 2020

    @sanex3339
    Member

    Expect the release in an hour or so.

  5. sanex3339 commented on Jun 4, 2020

    @sanex3339
    Member

    Fixed and released as 0.28.5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions