From ed90b0de03a71b1731c41e8b60220686bd84c6c1 Mon Sep 17 00:00:00 2001 From: Aaron Leopold <36278431+aaronleopold@users.noreply.github.com> Date: Sat, 3 Feb 2024 11:39:19 -0700 Subject: [PATCH] fix: panic for empty or otherwise too small inner file Fixes https://github.com/stumpapp/stump/issues/259 --- .gitignore | 1 + src/xmlutils.rs | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/.gitignore b/.gitignore index d4f917d..9f9e070 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ target Cargo.lock *.swp +.DS_Store diff --git a/src/xmlutils.rs b/src/xmlutils.rs index e4e3ecf..a887249 100644 --- a/src/xmlutils.rs +++ b/src/xmlutils.rs @@ -32,6 +32,8 @@ pub enum XMLError { InvalidState, #[error("No XML Elements Found")] NoElements, + #[error("XML content is empty")] + NoContent, } pub struct XMLReader<'a> { @@ -40,6 +42,11 @@ pub struct XMLReader<'a> { impl<'a> XMLReader<'a> { pub fn parse(content: &[u8]) -> Result, XMLError> { + // The operations below require at least 4 bytes to not panic + if content.is_empty() || content.len() < 4 { + return Err(XMLError::NoContent); + } + let content_str; //If there is a UTF-8 BOM marker, ignore it let content_slice = if content[0..3] == [0xefu8, 0xbbu8, 0xbfu8] {