From 6b83e68d7961f150ec15dd59d457d519e0bf8663 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 9 Aug 2026 06:50:56 +0900 Subject: refactor(env): split and join PATH lists with std::env The shim's PATH_SEPARATOR was hardcoded to ":", so every PATH list was split and joined on the wrong character off Unix. std::env::split_paths and join_paths use the platform's separator, which also lets the bin-dir membership test in EventDispatcher compare list entries instead of regex-matching the raw PATH string. Co-Authored-By: Claude Opus 5 (1M context) --- .../src/event_dispatcher/event_dispatcher.rs | 25 ++++++++++------------ 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'crates/shirabe/src') diff --git a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs index 3db924d4..f037f87d 100644 --- a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs +++ b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs @@ -31,7 +31,7 @@ use shirabe_php_rpc::{ }; use shirabe_php_shim::Catch as _; use shirabe_php_shim::{ - InvalidArgumentException, PATH_SEPARATOR, PhpMixed, RuntimeException, array_pop, array_push, + InvalidArgumentException, PhpMixed, RuntimeException, array_pop, array_push, array_search_in_vec, array_splice, file_exists, get_class, hash, implode, ini_get, is_array, is_callable, is_object, is_string, krsort, php_regex, preg_quote, realpath, spl_autoload_functions, spl_autoload_register, spl_autoload_unregister, spl_object_hash, @@ -1413,19 +1413,16 @@ try {{ if shirabe_php_shim::is_dir(&bin_dir) { let bin_dir = realpath(&bin_dir).unwrap_or(bin_dir); let path_value = Platform::get_env(path_env).unwrap_or_default(); - if !Preg::is_match( - format!( - "{{(^|{}){}($|{})}}", - PATH_SEPARATOR, - preg_quote(&bin_dir, None), - PATH_SEPARATOR - ), - &path_value, - ) { - Platform::put_env( - path_env, - &format!("{}{}{}", bin_dir, PATH_SEPARATOR, path_value), - ); + if !std::env::split_paths(&path_value).any(|dir| dir == std::path::Path::new(&bin_dir)) + { + let path_value = std::env::join_paths( + std::iter::once(std::path::PathBuf::from(&bin_dir)) + .chain(std::env::split_paths(&path_value)), + ) + .expect("bin-dir holds no path separator") + .into_string() + .unwrap(); + Platform::put_env(path_env, &path_value); } } } -- cgit v1.3.1-4-g156e