$ PATH=/extra/path:/usr/sbin:/usr/bin:/sbin:/bin \
> busybox sh -xc 'command -V ls; command -V ls; command -Vp ls; command -vp ls'
+ command -V ls
ls is /bin/ls
+ command -V ls
ls is a tracked alias for /bin/ls
+ command -Vp ls
ls is a tracked alias for (null)
+ command -vp ls
Segmentation fault

describe_command should respect `path' argument. Looking up in the hash table
may gives incorrect index in entry.u.index and finally causes incorrect output
or SIGSEGV.

Signed-off-by: Youfu Zhang <zhangyo...@gmail.com>
---
 shell/ash.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/shell/ash.c b/shell/ash.c
index 60c8ffe..1ff9d12 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -8193,15 +8193,8 @@ describe_command(char *command, const char *path, int 
describe_command_verbose)
                goto out;
        }
 #endif
-       /* Then check if it is a tracked alias */
-       cmdp = cmdlookup(command, 0);
-       if (cmdp != NULL) {
-               entry.cmdtype = cmdp->cmdtype;
-               entry.u = cmdp->param;
-       } else {
-               /* Finally use brute force */
-               find_command(command, &entry, DO_ABS, path);
-       }
+       /* Brute force */
+       find_command(command, &entry, DO_ABS, path);
 
        switch (entry.cmdtype) {
        case CMDNORMAL: {
-- 
2.8.4 (Apple Git-73)

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to