From c75a52739fd6e5b4e786cd54b9a643feea7f581e Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Tue, 29 Sep 2026 23:18:01 -0700 Subject: [PATCH] sqlite: persist enableDefensive() across reopen `enableDefensive()` updated only the live connection, so after `close()` and `open()` the defensive flag went back to the value passed to the constructor. Store the new value in the open configuration so that `open()` applies it again. Signed-off-by: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Assisted-by: claude:opus-5.5 --- src/node_sqlite.cc | 1 + test/parallel/test-sqlite-config.js | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/node_sqlite.cc b/src/node_sqlite.cc index a243ec49c4d9..2f86888191df 100644 --- a/src/node_sqlite.cc +++ b/src/node_sqlite.cc @@ -3538,6 +3538,7 @@ void Database::EnableDefensive(const FunctionCallbackInfo& args) { enable, &defensive_enabled); CHECK_ERROR_OR_THROW(isolate, db, defensive_ret, SQLITE_OK, void()); + db->open_config_.set_enable_defensive(enable); } void Database::LoadExtension(const FunctionCallbackInfo& args) { diff --git a/test/parallel/test-sqlite-config.js b/test/parallel/test-sqlite-config.js index 0988bdb14a3f..16457accdb5a 100644 --- a/test/parallel/test-sqlite-config.js +++ b/test/parallel/test-sqlite-config.js @@ -53,6 +53,26 @@ test('defensive mode off after calling db.enableDefensive(false)', (t) => { t.assert.strictEqual(checkDefensiveMode(db), false); }); +test('db.enableDefensive(true) persists across close() and open()', (t) => { + const db = new Database(':memory:', { + defensive: false + }); + db.enableDefensive(true); + db.close(); + db.open(); + t.assert.strictEqual(checkDefensiveMode(db), true); +}); + +test('db.enableDefensive(false) persists across close() and open()', (t) => { + const db = new Database(':memory:', { + defensive: true + }); + db.enableDefensive(false); + db.close(); + db.open(); + t.assert.strictEqual(checkDefensiveMode(db), false); +}); + test('throws if options.defensive is provided but is not a boolean', (t) => { t.assert.throws(() => { new Database(':memory:', { defensive: 42 });