node-lmdb
node-lmdb copied to clipboard
Ensure env is open in env.openDbi() to avoid Segfault
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.