From 5910fcddbfdeb26f1a8523e46e340cd4d2ca02e2 Mon Sep 17 00:00:00 2001 From: Jiseok CHOI Date: Mon, 21 Jul 2025 22:43:07 +0900 Subject: [PATCH 1/2] Make public `PyStr::ensure_valid_utf8` --- vm/src/builtins/str.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/src/builtins/str.rs b/vm/src/builtins/str.rs index fe7ad6a98a8..1c38314afe7 100644 --- a/vm/src/builtins/str.rs +++ b/vm/src/builtins/str.rs @@ -457,7 +457,7 @@ impl PyStr { self.data.as_str() } - fn ensure_valid_utf8(&self, vm: &VirtualMachine) -> PyResult<()> { + pub fn ensure_valid_utf8(&self, vm: &VirtualMachine) -> PyResult<()> { if self.is_utf8() { Ok(()) } else { From 67a6e13fa54c846d6b9e489389e1a7d0726979e8 Mon Sep 17 00:00:00 2001 From: Jiseok CHOI Date: Mon, 21 Jul 2025 22:43:38 +0900 Subject: [PATCH 2/2] Enforce valid UTF-8 encoding for sqlite collation names --- Lib/test/test_sqlite3/test_regression.py | 2 -- stdlib/src/sqlite.rs | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Lib/test/test_sqlite3/test_regression.py b/Lib/test/test_sqlite3/test_regression.py index 84c4a3ffe24..a658ff1f3ce 100644 --- a/Lib/test/test_sqlite3/test_regression.py +++ b/Lib/test/test_sqlite3/test_regression.py @@ -263,8 +263,6 @@ def test_connection_call(self): """ self.assertRaises(TypeError, self.con, b"select 1") - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_collation(self): def collation_cb(a, b): return 1 diff --git a/stdlib/src/sqlite.rs b/stdlib/src/sqlite.rs index cf4b4c0ca80..af23005a672 100644 --- a/stdlib/src/sqlite.rs +++ b/stdlib/src/sqlite.rs @@ -1163,6 +1163,7 @@ mod _sqlite { callable: PyObjectRef, vm: &VirtualMachine, ) -> PyResult<()> { + name.ensure_valid_utf8(vm)?; let name = name.to_cstring(vm)?; let db = self.db_lock(vm)?; let Some(data) = CallbackData::new(callable.clone(), vm) else {