From 360b1fcdaec07df7c2101bd33aaab38cf67f81ef Mon Sep 17 00:00:00 2001 From: Jussi Saurio Date: Tue, 27 May 2025 10:36:07 +0300 Subject: [PATCH] Fix bug: op_vopen should replace cursor slot, not add new one --- core/vdbe/execute.rs | 4 +++- core/vdbe/mod.rs | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/core/vdbe/execute.rs b/core/vdbe/execute.rs index 41400470c..104484100 100644 --- a/core/vdbe/execute.rs +++ b/core/vdbe/execute.rs @@ -998,7 +998,9 @@ pub fn op_vopen( state .cursors .borrow_mut() - .insert(*cursor_id, Some(Cursor::Virtual(cursor))); + .get_mut(*cursor_id) + .unwrap_or_else(|| panic!("cursor id {} out of bounds", *cursor_id)) + .replace(Cursor::Virtual(cursor)); state.pc += 1; Ok(InsnFunctionStepResult::Step) } diff --git a/core/vdbe/mod.rs b/core/vdbe/mod.rs index f9ce85acd..e5d0cd237 100644 --- a/core/vdbe/mod.rs +++ b/core/vdbe/mod.rs @@ -349,9 +349,9 @@ impl ProgramState { let cursors = self.cursors.borrow_mut(); std::cell::RefMut::map(cursors, |c| { c.get_mut(cursor_id) - .expect("cursor id out of bounds") + .unwrap_or_else(|| panic!("cursor id {} out of bounds", cursor_id)) .as_mut() - .expect("cursor not allocated") + .unwrap_or_else(|| panic!("cursor id {} is None", cursor_id)) }) } }