static-eval icon indicating copy to clipboard operation
static-eval copied to clipboard

Callback parameter needs an extra check

Open stathismor opened this issue 4 years ago • 0 comments

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?

stathismor avatar Dec 29 '21 16:12 stathismor