diff --git a/userspace/libraries/LibC/unistd.cpp b/userspace/libraries/LibC/unistd.cpp index 025ad3e1..113a420e 100644 --- a/userspace/libraries/LibC/unistd.cpp +++ b/userspace/libraries/LibC/unistd.cpp @@ -504,9 +504,11 @@ static int exec_impl_shebang(FILE* fp, const char* pathname, char* const* argv, new_argv[0] = const_cast(pathname); if (!argument.empty()) new_argv[1] = const_cast(argument.data()); - for (size_t i = 0; i < old_argc; i++) - new_argv[i + extra_args] = argv[i]; - new_argv[old_argc + extra_args] = nullptr; + if (old_argc) + new_argv[extra_args] = const_cast(pathname); + for (size_t i = 1; i < old_argc; i++) + new_argv[extra_args + i] = argv[i]; + new_argv[extra_args + old_argc] = nullptr; exec_impl(interpreter.data(), new_argv, envp, true, shebang_depth + 1); free(new_argv);