-
-
Notifications
You must be signed in to change notification settings - Fork 846
Closed
Description
The following code will crash:
const { isMainThread, Worker } = require('worker_threads');
const sqlite3 = require('sqlite3');
if (isMainThread) new Worker(__filename);
function main() {
const db = new sqlite3.Database(':memory:');
db.serialize(() => {
db.run('CREATE TABLE lorem (info TEXT)');
while (true) {
const stmt = db.prepare('INSERT INTO lorem VALUES (?)');
stmt.finalize();
}
});
db.close();
}
main();Trace:
FATAL ERROR: Error::ThrowAsJavaScriptException napi_throw
1: 0x100a59d5d node::Abort() (.cold.1) [/opt/local/bin/node]
2: 0x100085ca7 node::FatalError(char const*, char const*) [/opt/local/bin/node]
3: 0x100085e10 node::OnFatalError(char const*, char const*) [/opt/local/bin/node]
4: 0x100085cb0 node::OnFatalError(char const*, char const*) [/opt/local/bin/node]
5: 0x100061f67 napi_open_callback_scope [/opt/local/bin/node]
6: 0x10457118a Napi::Error::Fatal(char const*, char const*) [/Users/mohamed/Downloads/node-sqlite3/lib/binding/napi-v3-darwin-x64/node_sqlite3.node]
7: 0x10457457d Napi::Error::ThrowAsJavaScriptException() const [/Users/mohamed/Downloads/node-sqlite3/lib/binding/napi-v3-darwin-x64/node_sqlite3.node]
8: 0x104588247 node_sqlite3::Statement::Statement(Napi::CallbackInfo const&) [/Users/mohamed/Downloads/node-sqlite3/lib/binding/napi-v3-darwin-x64/node_sqlite3.node]
9: 0x104592b86 Napi::ObjectWrap<node_sqlite3::Statement>::ConstructorCallbackWrapper(napi_env__*, napi_callback_info__*)::'lambda'()::operator()() const [/Users/mohamed/Downloads/node-sqlite3/lib/binding/napi-v3-darwin-x64/node_sqlite3.node]
10: 0x104592900 Napi::ObjectWrap<node_sqlite3::Statement>::ConstructorCallbackWrapper(napi_env__*, napi_callback_info__*) [/Users/mohamed/Downloads/node-sqlite3/lib/binding/napi-v3-darwin-x64/node_sqlite3.node]
11: 0x10004f7f1 v8impl::(anonymous namespace)::FunctionCallbackWrapper::Invoke(v8::FunctionCallbackInfo<v8::Value> const&) [/opt/local/bin/node]
12: 0x1001dca35 v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) [/opt/local/bin/node]
13: 0x1001dbe15 v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<true>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) [/opt/local/bin/node]
14: 0x1001db8dd v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [/opt/local/bin/node]
15: 0x100781fd9 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit [/opt/local/bin/node]
16: 0x100716921 Builtins_JSBuiltinsConstructStub [/opt/local/bin/node]
Abort trap: 6
The culprit seems to be the HasInstance method of Database which is called in Statement::Statement. The constructor that it's checking against isn't context-specific. The issue is fixed when the HasInstance check is removed. I'm not sure how it can be replaced with a context-aware version.
Metadata
Metadata
Assignees
Labels
No labels