From 0c326a66c9eb3a3b5e4ab7892578b016b0590b1f Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Wed, 1 Apr 2020 01:13:02 -0400 Subject: [PATCH] [SV 57674] Use the system default PATH if $PATH is not set When using execvp() if $PATH is not present in the environment it will automatically search the system default PATH string. Emulate this by passing the system default PATH to find_in_given_path() if we don't find PATH in the environment. * src/job.c (child_execute_job): Use confstr(_CS_PATH) if PATH is not found. --- src/job.c | 12 ++++++++++++ tests/scripts/misc/general4 | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/src/job.c b/src/job.c index 94835c0d..c4e77490 100644 --- a/src/job.c +++ b/src/job.c @@ -2381,6 +2381,18 @@ child_execute_job (struct childbase *child, int good_stdin, char **argv) break; } + /* execvp() will use a default PATH if none is set; emulate that. */ + if (p == NULL) + { + size_t l = confstr (_CS_PATH, NULL, 0); + if (l) + { + char *dp = alloca (l); + confstr (_CS_PATH, dp, l); + p = dp; + } + } + cmd = (char *)find_in_given_path (argv[0], p, 0); } diff --git a/tests/scripts/misc/general4 b/tests/scripts/misc/general4 index 263505e4..0077c896 100644 --- a/tests/scripts/misc/general4 +++ b/tests/scripts/misc/general4 @@ -118,4 +118,11 @@ all: ; $sname unlink($sname); +# SV 57674: ensure we use a system default PATH if one is not set +delete $ENV{PATH}; +run_make_test(q! +a: ; @echo hi +!, + '', "hi\n"); + 1;