node-lmdb icon indicating copy to clipboard operation
node-lmdb copied to clipboard

Ensure env is open in env.openDbi() to avoid Segfault

Open grgalex opened this issue 4 months ago • 0 comments

Fix a Segmentation Fault caused when calling openDbi on a non-open environment:

Reproducer:

var lmdb = require('./index.js')
var env = new lmdb.Env();
var dbi = env.openDbi({name: "myPrettyDatabase", create: true})

GDB backtrace:

Thread 1 "node_g" received signal SIGSEGV, Segmentation fault.
0x00007fddcc1cfbe2 in mdb_txn_renew0 (txn=0x0) at ../dependencies/lmdb/libraries/liblmdb/mdb.c:2996
2996            MDB_env *env = txn->mt_env;
(gdb) bt
#0  0x00007fddcc1cfbe2 in mdb_txn_renew0 (txn=0x0) at ../dependencies/lmdb/libraries/liblmdb/mdb.c:2996
#1  0x00007fddcc1d05e4 in mdb_txn_begin (env=0x55e9f940f590, parent=0x0, flags=0, ret=0x7fff680575d0) at ../dependencies/lmdb/libraries/liblmdb/mdb.c:3244
#2  0x00007fddcc1f4b81 in DbiWrap::ctor (info=...) at ../src/dbi.cpp:127
#3  0x00007fddcc1e254d in Nan::imp::FunctionCallbackWrapper (info=...) at ../../nan/nan_callbacks_12_inl.h:177

Behavior after fix:

node test.js                            
/tmp/node-lmdb/test.js:3
var dbi = env.openDbi({name: "myPrettyDatabase", create: true}) 
              ^ 
                                                                               
Error: The environment is not open.   

grgalex avatar Sep 25 '25 17:09 grgalex