From c469792043831363b472ff6783210cb99fc9d647 Mon Sep 17 00:00:00 2001 From: Anhad Singh Date: Sat, 28 Feb 2026 00:06:46 +1100 Subject: [PATCH] feat(exec/shebang): handle multiple whitespaces Signed-off-by: Anhad Singh --- src/platform/redox/exec.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/platform/redox/exec.rs b/src/platform/redox/exec.rs index 569a5a53b1..f39a083b7c 100644 --- a/src/platform/redox/exec.rs +++ b/src/platform/redox/exec.rs @@ -368,21 +368,29 @@ where args_offset.map(NonZeroUsize::get), args_offset_u64.map(NonZeroU64::get), ) { - let len = offset - interp_offset - 1; - let len_u64 = offset_u64 - interp_offset_u64 - 1; + let len = offset - interp_offset; + let len_u64 = offset_u64 - interp_offset_u64; let mut args = Vec::with_capacity(len); - // Eat initial whitespace - reader.consume(1); reader .take(len_u64) .read_to_end(&mut args) .map_err(|_| Error::new(E2BIG))?; + // Eat '\n' reader.consume(1); - let args = CString::new(args).map_err(|_| Error::new(ENOEXEC))?; - Some(args) + let mut arg_start = 0; + while arg_start < args.len() && (args[arg_start] == b' ' || args[arg_start] == b'\t') { + arg_start += 1; + } + + if arg_start < args.len() { + let args = CString::new(&args[arg_start..]).map_err(|_| Error::new(ENOEXEC))?; + Some(args) + } else { + None + } } else { None };