From 652860a48d0ea5db5f9b20ed98ff69a98d32c656 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 16 Aug 2026 16:25:50 +0900 Subject: fix(symfony-finder): fail SplFileInfo::get_size on a failed stat \SplFileInfo::getSize() throws a \RuntimeException when stat fails, and neither Symfony's subclass nor Composer's Filesystem::directorySize() catches it. Returning 0 turned an unreadable file into an empty one. Co-Authored-By: Claude Opus 5 (1M context) --- crates/shirabe-symfony-finder/Cargo.toml | 1 + crates/shirabe-symfony-finder/src/spl_file_info.rs | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'crates') diff --git a/crates/shirabe-symfony-finder/Cargo.toml b/crates/shirabe-symfony-finder/Cargo.toml index 8088aa23..0823bfaf 100644 --- a/crates/shirabe-symfony-finder/Cargo.toml +++ b/crates/shirabe-symfony-finder/Cargo.toml @@ -10,6 +10,7 @@ license.workspace = true [dependencies] shirabe-pcre.workspace = true shirabe-php-shim.workspace = true +anyhow.workspace = true chrono.workspace = true indexmap.workspace = true regex.workspace = true diff --git a/crates/shirabe-symfony-finder/src/spl_file_info.rs b/crates/shirabe-symfony-finder/src/spl_file_info.rs index b719efc5..40bd153a 100644 --- a/crates/shirabe-symfony-finder/src/spl_file_info.rs +++ b/crates/shirabe-symfony-finder/src/spl_file_info.rs @@ -76,9 +76,15 @@ impl SplFileInfo { shirabe_php_shim::realpath(&self.pathname) } - pub fn get_size(&self) -> i64 { - // \SplFileInfo::getSize() returns the file size in bytes (throws on failure). - // TODO(php-semantics): PHP throws a \RuntimeException on stat failure; this returns 0 instead. - shirabe_php_shim::filesize(&self.pathname).unwrap_or(0) + pub fn get_size(&self) -> anyhow::Result { + // Inherited from \SplFileInfo, whose failure message names the base class even for subclasses. + match shirabe_php_shim::filesize(&self.pathname) { + Some(size) => Ok(size), + None => Err(shirabe_php_shim::RuntimeException::new(format!( + "SplFileInfo::getSize(): stat failed for {}", + self.pathname + )) + .into()), + } } } -- cgit v1.3.1-4-g156e