kriszyp/lmdb-js

segfault when path set to null or undefined (typescript demands path to exist)

Opened this issue · 3 comments

Hello,

According to documentation, omitting the path parameter during db.open() should create a temporary database that automatically deletes itself. However Typescript erroneously claims that path is a required parameter and cannot be omitted.

Furthermore, any attempt to make path behave as if omitted by setting it to null or undefined causes a segfault.

Not a high priority issue, but we could improve QOL here by both updating the typings to mark path as optional as well as preventing null/undefined path from segfaulting and make it behave as if it were omitted.

Thanks!

I can update the typings, but I can't reproduce any segfault when omitting the path (in fact the unit tests extensively use databases opened without a path so that can run on temp databases). Do you have any steps to reproduce this?

Hey, thanks for the reply.

For me it happens on node 20.3.0 on windows when you explicitly set path to a falsey value, for example { path: "" } or { path: null } or { path: undefined }. It works correctly if explicitly omitted like this {}

Using lmdb v2.8.2

Hey, just to add to this: I've been using 2.9.1 and the typescript declarations seems to be different between ES and CJS files. index.d.cts has path as a required key in RootDatabaseOptionsWithPath while index.d.ts lists path as optional. As a result ts-jest fails to compile tests that are using temporary lmdb databases (there's a bug in ts-jest where it prefers .d.cts files over .d.ts or .d.mts kulshekhar/ts-jest#4221)