From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Fri, 17 Oct 2025 23:54:50 +0200 Subject: [PATCH] xml: Treat user stop errors as successful parses An attempt at fixing https://gitlab.gnome.org/GNOME/librsvg/-/issues/1201. --- rsvg/src/xml/xml2.rs | 2 ++ rsvg/src/xml/xml2_load.rs | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/rsvg/src/xml/xml2.rs b/rsvg/src/xml/xml2.rs index b2f9785ff6d3..5da2fbddc31e 100644 --- a/rsvg/src/xml/xml2.rs +++ b/rsvg/src/xml/xml2.rs @@ -15,6 +15,8 @@ pub const XML_PARSE_BIG_LINES: libc::c_int = 1 << 22; pub const XML_SAX2_MAGIC: libc::c_uint = 0xDEEDBEAF; +pub const XML_ERR_USER_STOP: libc::c_int = 111; + pub type xmlDocPtr = gpointer; pub type xmlEntityPtr = gpointer; diff --git a/rsvg/src/xml/xml2_load.rs b/rsvg/src/xml/xml2_load.rs index d9e4f3926db0..28e81e0e7ff7 100644 --- a/rsvg/src/xml/xml2_load.rs +++ b/rsvg/src/xml/xml2_load.rs @@ -473,8 +473,13 @@ impl<'a> Xml2Parser<'a> { Err(LoadingError::from(io_error)) } else if !xml_parse_success { let xerr = xmlCtxtGetLastError(parser as *mut _); - let msg = xml2_error_to_string(xerr); - Err(LoadingError::XmlParseError(msg)) + if !xerr.is_null() && (*xerr).code == XML_ERR_USER_STOP { + // We stopped the parse ourselves + Ok(()) + } else { + let msg = xml2_error_to_string(xerr); + Err(LoadingError::XmlParseError(msg)) + } } else { Ok(()) }