vm: pass parsing_context to ScriptCompiler::CompileFunctionInContext
ContextifyContext::CompileFunction in src/node_contextify.cc was incorrectly passing the context variable to ScriptCompiler::CompileFunctionInContext This meant that the parsingContext option in vm.compileFunction was not being applied properly to the compiled function. fixes: https://github.com/nodejs/node/issues/23194 doc: clarify parsingContext option for vm.compileScript test: usage of parsingContext in vm.compileFunction PR-URL: https://github.com/nodejs/node/pull/23206 Fixes: https://github.com/nodejs/node/issues/23194 Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
This commit is contained in:
parent
700fe5bbc4
commit
8da674df49
@ -673,8 +673,8 @@ added: v10.10.0
|
||||
data for the supplied source.
|
||||
* `produceCachedData` {boolean} Specifies whether to produce new cache data.
|
||||
**Default:** `false`.
|
||||
* `parsingContext` {Object} The sandbox/context in which the said function
|
||||
should be compiled in.
|
||||
* `parsingContext` {Object} The [contextified][] sandbox in which the said
|
||||
function should be compiled in.
|
||||
* `contextExtensions` {Object[]} An array containing a collection of context
|
||||
extensions (objects wrapping the current scope) to be applied while
|
||||
compiling. **Default:** `[]`.
|
||||
|
@ -1070,7 +1070,7 @@ void ContextifyContext::CompileFunction(
|
||||
}
|
||||
|
||||
MaybeLocal<Function> maybe_fun = ScriptCompiler::CompileFunctionInContext(
|
||||
context, &source, params.size(), params.data(),
|
||||
parsing_context, &source, params.size(), params.data(),
|
||||
context_extensions.size(), context_extensions.data(), options);
|
||||
|
||||
Local<Function> fun;
|
||||
|
@ -267,6 +267,46 @@ const vm = require('vm');
|
||||
stack: 'Error: Sample Error\n at <anonymous>:1:10'
|
||||
});
|
||||
|
||||
assert.strictEqual(
|
||||
vm.compileFunction(
|
||||
'return varInContext',
|
||||
[],
|
||||
{
|
||||
parsingContext: vm.createContext({ varInContext: 'abc' })
|
||||
}
|
||||
)(),
|
||||
'abc'
|
||||
);
|
||||
|
||||
common.expectsError(() => {
|
||||
vm.compileFunction(
|
||||
'return varInContext',
|
||||
[]
|
||||
)();
|
||||
}, {
|
||||
message: 'varInContext is not defined',
|
||||
stack: 'ReferenceError: varInContext is not defined\n at <anonymous>:1:1'
|
||||
});
|
||||
|
||||
assert.notDeepStrictEqual(
|
||||
vm.compileFunction(
|
||||
'return global',
|
||||
[],
|
||||
{
|
||||
parsingContext: vm.createContext({ global: {} })
|
||||
}
|
||||
)(),
|
||||
global
|
||||
);
|
||||
|
||||
assert.deepStrictEqual(
|
||||
vm.compileFunction(
|
||||
'return global',
|
||||
[]
|
||||
)(),
|
||||
global
|
||||
);
|
||||
|
||||
// Resetting value
|
||||
Error.stackTraceLimit = oldLimit;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user