aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Kraai <kraai@debian.org>2002-01-14 18:30:10 +0000
committerMatt Kraai <kraai@debian.org>2002-01-14 18:30:10 +0000
commita3181dd833970b1aa99087c3e3647387116547f0 (patch)
tree60f79ccf57bb1028f73230e677ad628b21f28d16
parentba552523fafaf687c6c6cf6113fe7b6c1b786920 (diff)
downloadbusybox-a3181dd833970b1aa99087c3e3647387116547f0.tar.gz
Do not segfault if PATH is unset.
-rw-r--r--findutils/which.c19
-rw-r--r--testsuite/which/which-uses-default-path8
2 files changed, 18 insertions, 9 deletions
diff --git a/findutils/which.c b/findutils/which.c
index eec5fdbfb..b2af5a8ea 100644
--- a/findutils/which.c
+++ b/findutils/which.c
@@ -38,15 +38,16 @@ extern int which_main(int argc, char **argv)
argc--;
path_list = getenv("PATH");
- if (!path_list)
- path_list = "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin";
-
- /* Replace colons with zeros in path_parsed and count them */
- for(i=strlen(path_list); i > 0; i--)
- if (path_list[i]==':') {
- path_list[i]=0;
- count++;
- }
+ if (path_list != NULL) {
+ for(i=strlen(path_list); i > 0; i--)
+ if (path_list[i]==':') {
+ path_list[i]=0;
+ count++;
+ }
+ } else {
+ path_list = "/bin\0/sbin\0/usr/bin\0/usr/sbin\0/usr/local/bin";
+ count = 5;
+ }
while(argc-- > 0) {
path_n = path_list;
diff --git a/testsuite/which/which-uses-default-path b/testsuite/which/which-uses-default-path
new file mode 100644
index 000000000..e2a2f3893
--- /dev/null
+++ b/testsuite/which/which-uses-default-path
@@ -0,0 +1,8 @@
+BUSYBOX=$(type -p busybox)
+echo $BUSYBOX
+SAVED_PATH=$PATH
+unset PATH
+$BUSYBOX which ls
+STATUS=$?
+export PATH=$SAVED_PATH
+return $STATUS