From 0d6301cb7c159ca59a14a4b8c11d9a7d28f1828c Mon Sep 17 00:00:00 2001 From: natocool2 Date: Tue, 13 Oct 2026 09:07:44 +0100 Subject: [PATCH] Bump quick-xml to 0.41 (RUSTSEC-2026-0194, RUSTSEC-2026-0195) RUSTSEC-2026-0194 (quadratic duplicate-attribute check) and RUSTSEC-2026-0195 (unbounded NsReader namespace allocation) are fixed in quick-xml 0.41. deckcraft-pptx already reads attributes with with_checks(false) and does not use NsReader, so neither is reachable today; the bump keeps the workspace on a supported quick-xml and leaves one copy (wayland-scanner already locks 0.41.0). decode_and_unescape_value() is deprecated in 0.41 (clippy -D warnings); decoded_and_normalized_value (Implicit1_0, ...) is what the deprecated method now does. Co-Authored-By: Claude Opus 5.5 (1M context) --- Cargo.lock | 13 ++----------- Cargo.toml | 2 +- crates/pptx/src/xml.rs | 6 ++++-- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f4d53470..1a846a5b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1099,7 +1099,7 @@ dependencies = [ "deckcraft-model", "image", "log", - "quick-xml 0.38.4", + "quick-xml", "serde_json", "thiserror 2.0.21", "zip", @@ -3437,15 +3437,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" -[[package]] -name = "quick-xml" -version = "0.38.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" -dependencies = [ - "memchr", -] - [[package]] name = "quick-xml" version = "0.41.0" @@ -4880,7 +4871,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" dependencies = [ "proc-macro2", - "quick-xml 0.41.0", + "quick-xml", "quote", ] diff --git a/Cargo.toml b/Cargo.toml index b8596156..bcf88292 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,7 +59,7 @@ vello_common = { version = "0.2", default-features = false } image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "gif", "tiff", "bmp"] } krilla = { version = "0.8", features = ["pdf"] } i_overlay = "9" -quick-xml = "0.38" +quick-xml = "0.41" zip = { version = "3", default-features = false, features = ["deflate"] } # ui diff --git a/crates/pptx/src/xml.rs b/crates/pptx/src/xml.rs index 60a94817..4146d228 100644 --- a/crates/pptx/src/xml.rs +++ b/crates/pptx/src/xml.rs @@ -340,8 +340,10 @@ fn start_el(b: &quick_xml::events::BytesStart, reader: &quick_xml::Reader<&[u8]> let mut attrs = vec![]; for a in b.attributes().with_checks(false).flatten() { let k = String::from_utf8_lossy(a.key.as_ref()).into_owned(); - let v = - a.decode_and_unescape_value(reader.decoder()).map(|c| c.into_owned()).unwrap_or_else(|_| String::from_utf8_lossy(&a.value).into_owned()); + let v = a + .decoded_and_normalized_value(quick_xml::XmlVersion::Implicit1_0, reader.decoder()) + .map(|c| c.into_owned()) + .unwrap_or_else(|_| String::from_utf8_lossy(&a.value).into_owned()); attrs.push((k, v)); } El { name, attrs, children: vec![] }