src: disallow constructor behaviour for native methods
Disallow constructor behaviour and setting up prototypes for native methods that are not constructors (i.e. make them behave like ES6 class methods). PR-URL: https://github.com/nodejs/node/pull/26700 Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
11f8024d99
commit
1935625df4
@ -883,9 +883,7 @@ inline void Environment::SetMethod(v8::Local<v8::Object> that,
|
||||
v8::Local<v8::Context> context = isolate()->GetCurrentContext();
|
||||
v8::Local<v8::Function> function =
|
||||
NewFunctionTemplate(callback, v8::Local<v8::Signature>(),
|
||||
// TODO(TimothyGu): Investigate if SetMethod is ever
|
||||
// used for constructors.
|
||||
v8::ConstructorBehavior::kAllow,
|
||||
v8::ConstructorBehavior::kThrow,
|
||||
v8::SideEffectType::kHasSideEffect)
|
||||
->GetFunction(context)
|
||||
.ToLocalChecked();
|
||||
@ -903,9 +901,7 @@ inline void Environment::SetMethodNoSideEffect(v8::Local<v8::Object> that,
|
||||
v8::Local<v8::Context> context = isolate()->GetCurrentContext();
|
||||
v8::Local<v8::Function> function =
|
||||
NewFunctionTemplate(callback, v8::Local<v8::Signature>(),
|
||||
// TODO(TimothyGu): Investigate if SetMethod is ever
|
||||
// used for constructors.
|
||||
v8::ConstructorBehavior::kAllow,
|
||||
v8::ConstructorBehavior::kThrow,
|
||||
v8::SideEffectType::kHasNoSideEffect)
|
||||
->GetFunction(context)
|
||||
.ToLocalChecked();
|
||||
|
@ -42,3 +42,8 @@ const err = {
|
||||
};
|
||||
common.expectsError(function() { process.chdir({}); }, err);
|
||||
common.expectsError(function() { process.chdir(); }, err);
|
||||
|
||||
// Check that our built-in methods do not have a prototype/constructor behaviour
|
||||
// if they don't need to. This could be tested for any of our C++ methods.
|
||||
assert.strictEqual(process.cwd.prototype, undefined);
|
||||
assert.throws(() => new process.cwd(), TypeError);
|
||||
|
Loading…
x
Reference in New Issue
Block a user