Closed
Description
The node REPL seems to crash if a C++ getter creates an instance of a class that extends ObjectWrap
.
This works in a script, but it crashes as soon as the REPL's auto-complete attempts to "preview" bar.get_new_foo
:
#include <napi.h>
struct Foo : public Napi::ObjectWrap<Foo> {
static Napi::Function Init(Napi::Env env, Napi::Object exports) {
return DefineClass(env, "Foo", {});
}
Foo(Napi::CallbackInfo const& info) : Napi::ObjectWrap<Foo>(info){};
};
struct Bar : public Napi::ObjectWrap<Bar> {
static Napi::Function Init(Napi::Env env, Napi::Object exports) {
FooConstructor = Napi::Persistent(Foo::Init(env, exports));
FooConstructor.SuppressDestruct();
return DefineClass(env, "Bar", {InstanceAccessor<&Bar::get_new_foo>("get_new_foo")});
}
Bar(Napi::CallbackInfo const& info) : Napi::ObjectWrap<Bar>(info){};
private:
static Napi::FunctionReference FooConstructor;
Napi::Value get_new_foo(Napi::CallbackInfo const& info) {
return FooConstructor.New({});
}
};
Napi::FunctionReference Bar::FooConstructor;
struct NodeREPLCrashRepro : public Napi::Addon<NodeREPLCrashRepro> {
NodeREPLCrashRepro(Napi::Env env, Napi::Object exports) {
DefineAddon(exports, {InstanceValue("Bar", Bar::Init(env, exports))});
}
};
NODE_API_ADDON(NodeREPLCrashRepro);
$ node
Welcome to Node.js v15.14.0.
Type ".help" for more information.
> var { Bar } = require(`./build/Debug/crash_repro.node`)
undefined
> var bar = new Bar()
undefined
> bar.gFATAL ERROR: Error::Error napi_create_reference
1: 0xa89e60 node::Abort() [node]
2: 0x9ade29 node::FatalError(char const*, char const*) [node]
3: 0x9ade32 [node]
4: 0xa55b3b napi_fatal_error [node]
5: 0x7f3bf031ea4e Napi::ObjectReference::~ObjectReference() [build/Debug/crash_repro.node]
6: 0x7f3bf031eb14 Napi::Error::Error(napi_env__*, napi_value__*) [build/Debug/crash_repro.node]
7: 0x7f3bf031e97f Napi::Error::New(napi_env__*) [build/Debug/crash_repro.node]
8: 0x7f3bf031e758 Napi::Function::New(unsigned long, napi_value__* const*) const [build/Debug/crash_repro.node]
9: 0x7f3bf031e6d9 Napi::Function::New(std::initializer_list<napi_value__*> const&) const [build/Debug/crash_repro.node]
10: 0x7f3bf031f3a8 Napi::FunctionReference::New(std::initializer_list<napi_value__*> const&) const [build/Debug/crash_repro.node]
11: 0x7f3bf032050d Bar::get_new_foo(Napi::CallbackInfo const&) [build/Debug/crash_repro.node]
12: 0x7f3bf031db65 [build/Debug/crash_repro.node]
13: 0x7f3bf031dc39 [build/Debug/crash_repro.node]
14: 0x7f3bf031dbfd [build/Debug/crash_repro.node]
15: 0xa390bf [node]
16: 0x149e62d [node]
Aborted
Metadata
Metadata
Assignees
Labels
No labels