From 4feb2b2e4637b3e80e71cf85cda40c417516ca00 Mon Sep 17 00:00:00 2001 From: Tomasz Szymczyszyn Date: Tue, 6 Oct 2026 18:46:32 +0200 Subject: [PATCH] Fix invalid UTF-8 handling in SQLite parser Port gwenn/lemon-rs@14f422a to replace the unchecked UTF-8 conversion with a lossy conversion. Bump the vendored parser to 0.13.1 and add regression coverage for invalid input.\n\nAddresses CVE-2025-47736 / GHSA-8m95-fffc-h4c5. --- Cargo.lock | 2 +- vendored/sqlite3-parser/Cargo.toml | 2 +- vendored/sqlite3-parser/src/dialect/mod.rs | 12 +++++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0054abc875..02f25a01f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3107,7 +3107,7 @@ dependencies = [ [[package]] name = "libsql-sqlite3-parser" -version = "0.13.0" +version = "0.13.1" dependencies = [ "bitflags 2.6.0", "cc", diff --git a/vendored/sqlite3-parser/Cargo.toml b/vendored/sqlite3-parser/Cargo.toml index 0381ac1d99..2715330be6 100644 --- a/vendored/sqlite3-parser/Cargo.toml +++ b/vendored/sqlite3-parser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libsql-sqlite3-parser" -version = "0.13.0" +version = "0.13.1" edition = "2021" authors = ["gwenn"] description = "SQL parser (as understood by SQLite) (libsql fork)" diff --git a/vendored/sqlite3-parser/src/dialect/mod.rs b/vendored/sqlite3-parser/src/dialect/mod.rs index e0266f10e4..cc06c1a9a0 100644 --- a/vendored/sqlite3-parser/src/dialect/mod.rs +++ b/vendored/sqlite3-parser/src/dialect/mod.rs @@ -58,7 +58,7 @@ impl TokenType { } fn from_bytes(bytes: &[u8]) -> String { - unsafe { str::from_utf8_unchecked(bytes).to_owned() } + String::from_utf8_lossy(bytes).to_string() } include!(concat!(env!("OUT_DIR"), "/keywords.rs")); @@ -403,3 +403,13 @@ impl TokenType { } } } + +#[cfg(test)] +mod tests { + use super::from_bytes; + + #[test] + fn converts_invalid_utf8_lossily() { + assert_eq!(from_bytes(&[0xC0, 0x80]), "��"); + } +}