mirror of https://github.com/lukechilds/node.git
Browse Source
In vm, the setter interceptor should not copy a value onto the sandbox, if setting it on the global object will fail. It will fail if we are in strict mode and set a value without declaring it. Fixes: https://github.com/nodejs/node/issues/5344 PR-URL: https://github.com/nodejs/node/pull/7908 Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>v6.x
Franziska Hinkelmann
9 years ago
committed by
cjihrig
2 changed files with 40 additions and 1 deletions
@ -0,0 +1,27 @@ |
|||||
|
'use strict'; |
||||
|
require('../common'); |
||||
|
const assert = require('assert'); |
||||
|
const vm = require('vm'); |
||||
|
const ctx = vm.createContext(); |
||||
|
|
||||
|
// Test strict mode inside a vm script, i.e., using an undefined variable
|
||||
|
// throws a ReferenceError. Also check that variables
|
||||
|
// that are not successfully set in the vm, must not be set
|
||||
|
// on the sandboxed context.
|
||||
|
|
||||
|
vm.runInContext('w = 1;', ctx); |
||||
|
assert.strictEqual(1, ctx.w); |
||||
|
|
||||
|
assert.throws(function() { vm.runInContext('"use strict"; x = 1;', ctx); }, |
||||
|
/ReferenceError: x is not defined/); |
||||
|
assert.strictEqual(undefined, ctx.x); |
||||
|
|
||||
|
vm.runInContext('"use strict"; var y = 1;', ctx); |
||||
|
assert.strictEqual(1, ctx.y); |
||||
|
|
||||
|
vm.runInContext('"use strict"; this.z = 1;', ctx); |
||||
|
assert.strictEqual(1, ctx.z); |
||||
|
|
||||
|
// w has been defined
|
||||
|
vm.runInContext('"use strict"; w = 2;', ctx); |
||||
|
assert.strictEqual(2, ctx.w); |
Loading…
Reference in new issue