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.
|
data for the supplied source.
|
||||||
* `produceCachedData` {boolean} Specifies whether to produce new cache data.
|
* `produceCachedData` {boolean} Specifies whether to produce new cache data.
|
||||||
**Default:** `false`.
|
**Default:** `false`.
|
||||||
* `parsingContext` {Object} The sandbox/context in which the said function
|
* `parsingContext` {Object} The [contextified][] sandbox in which the said
|
||||||
should be compiled in.
|
function should be compiled in.
|
||||||
* `contextExtensions` {Object[]} An array containing a collection of context
|
* `contextExtensions` {Object[]} An array containing a collection of context
|
||||||
extensions (objects wrapping the current scope) to be applied while
|
extensions (objects wrapping the current scope) to be applied while
|
||||||
compiling. **Default:** `[]`.
|
compiling. **Default:** `[]`.
|
||||||
|
@ -1070,7 +1070,7 @@ void ContextifyContext::CompileFunction(
|
|||||||
}
|
}
|
||||||
|
|
||||||
MaybeLocal<Function> maybe_fun = ScriptCompiler::CompileFunctionInContext(
|
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);
|
context_extensions.size(), context_extensions.data(), options);
|
||||||
|
|
||||||
Local<Function> fun;
|
Local<Function> fun;
|
||||||
|
@ -267,6 +267,46 @@ const vm = require('vm');
|
|||||||
stack: 'Error: Sample Error\n at <anonymous>:1:10'
|
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
|
// Resetting value
|
||||||
Error.stackTraceLimit = oldLimit;
|
Error.stackTraceLimit = oldLimit;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user