diff --git a/Lib/test/test_sqlite3/test_dbapi.py b/Lib/test/test_sqlite3/test_dbapi.py index f78aa7a8e..1f6f76615 100644 --- a/Lib/test/test_sqlite3/test_dbapi.py +++ b/Lib/test/test_sqlite3/test_dbapi.py @@ -1125,7 +1125,6 @@ class CursorTests(unittest.TestCase): res = self.cu.fetchmany(100) self.assertEqual(res, []) - @unittest.expectedFailure # TODO: RUSTPYTHON fetchmany size validation not implemented def test_invalid_fetchmany(self): UINT32_MAX = (1 << 32) - 1 fetchmany = self.cu.fetchmany diff --git a/crates/stdlib/src/_sqlite3.rs b/crates/stdlib/src/_sqlite3.rs index b9e146b98..649831aa3 100644 --- a/crates/stdlib/src/_sqlite3.rs +++ b/crates/stdlib/src/_sqlite3.rs @@ -1883,9 +1883,16 @@ mod _sqlite3 { args: FetchManyArgs, vm: &VirtualMachine, ) -> PyResult> { - let max_rows = args - .size - .unwrap_or_else(|| zelf.arraysize.load(Ordering::Relaxed)); + let max_rows = match args.size { + Some(size) => { + if size < 0 { + return Err(vm.new_value_error("fetchmany may not be negative")); + } + + size + } + None => zelf.arraysize.load(Ordering::Relaxed), + }; let mut list = vec![]; while let PyIterReturn::Return(row) = Cursor::next(zelf, vm)? {