From f7fe9c53cb565879c4e92bebe8550c79808f6e7e Mon Sep 17 00:00:00 2001 From: Jiseok CHOI Date: Fri, 27 Feb 2026 20:59:15 +0900 Subject: [PATCH] sqlite3: reject negative arraysize values (#7238) --- Lib/test/test_sqlite3/test_dbapi.py | 1 - crates/stdlib/src/_sqlite3.rs | 9 ++++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_sqlite3/test_dbapi.py b/Lib/test/test_sqlite3/test_dbapi.py index 46f098e46..f78aa7a8e 100644 --- a/Lib/test/test_sqlite3/test_dbapi.py +++ b/Lib/test/test_sqlite3/test_dbapi.py @@ -1088,7 +1088,6 @@ class CursorTests(unittest.TestCase): self.assertEqual(len(res), 2) - @unittest.expectedFailure # TODO: RUSTPYTHON arraysize validation not implemented def test_invalid_array_size(self): UINT32_MAX = (1 << 32) - 1 setter = functools.partial(setattr, self.cu, 'arraysize') diff --git a/crates/stdlib/src/_sqlite3.rs b/crates/stdlib/src/_sqlite3.rs index dbb135775..b9e146b98 100644 --- a/crates/stdlib/src/_sqlite3.rs +++ b/crates/stdlib/src/_sqlite3.rs @@ -1955,9 +1955,16 @@ mod _sqlite3 { fn arraysize(&self) -> c_int { self.arraysize.load(Ordering::Relaxed) } + #[pygetset(setter)] - fn set_arraysize(&self, val: c_int) { + fn set_arraysize(&self, val: c_int, vm: &VirtualMachine) -> PyResult<()> { + if val < 0 { + return Err(vm.new_value_error("arraysize may not be negative")); + } + self.arraysize.store(val, Ordering::Relaxed); + + Ok(()) } fn build_row_cast_map(