Skip to content

Callback parameter needs an extra check #38

@stathismor

Description

@stathismor

My test code looks like this:

var evaluate = require('static-eval');
var parse = require('esprima').parse;

var src = 'foo(function (obj) { return obj.x })';
var ast = parse(src).body[0].expression;
var result = evaluate(ast, {
  foo: function (func) {
    return func({x: 1})
  },
});

console.log(result);

When I run it, I get:

$ node test.js
/home/stathis/src/jellyfish-jellyscript/node_modules/static-eval/index.js:134
                return obj[node.property.name];
                          ^

TypeError: Cannot read property 'x' of null
    at walk (/home/stathis/src/jellyfish-jellyscript/node_modules/static-eval/index.js:134:27)
    at walk (/home/stathis/src/jellyfish-jellyscript/node_modules/static-eval/index.js:152:20)
    at walk (/home/stathis/src/jellyfish-jellyscript/node_modules/static-eval/index.js:171:20)
    at walk (/home/stathis/src/jellyfish-jellyscript/node_modules/static-eval/index.js:112:25)
    at module.exports (/home/stathis/src/jellyfish-jellyscript/node_modules/static-eval/index.js:204:7)
    at Object.<anonymous> (/home/stathis/src/jellyfish-jellyscript/test.js:6:14)
    at Module._compile (internal/modules/cjs/loader.js:1068:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
    at Module.load (internal/modules/cjs/loader.js:933:32)
    at Function.Module._load (internal/modules/cjs/loader.js:774:14)

whereas when I change

var src = 'foo(function (obj) { return obj.x })';`

to

var src = 'foo(function (obj) { return obj && obj.x })';`

I get a successful result:

$ node test.js
1

This looks like a bug to me, as my callback's input here is just {x: 1}, why would I need to make sure obj exists?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions