Module Name:    src
Committed By:   martin
Date:           Thu Aug 27 09:15:39 UTC 2020

Modified Files:
        src/bin/sh [netbsd-9]: exec.c

Log Message:
Pull up following revision(s) (requested by kre in ticket #1064):

        bin/sh/exec.c: revision 1.54

PR bin/55526

Fix a bug that has existed since the "command" command was added in
2003.   "command foo" would cause the definition of a function "foo"
to be lost (not freed, simply discarded) if "foo" is (in addition to
being a function) a filesystem command.   The case where "foo" is
a builtin was handled.

For now, when a function exists with the same name as a filesystem
command, the latter can never appear in the command hash table, and
when used (which can only be via "command foo", just "foo" finds
the function) will always result in a full PATH search.

XXX pullup everything (from NetBSD 2.0 onwards).   (really -8 and -9)


To generate a diff of this commit:
cvs rdiff -u -r1.53 -r1.53.2.1 src/bin/sh/exec.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/bin/sh/exec.c
diff -u src/bin/sh/exec.c:1.53 src/bin/sh/exec.c:1.53.2.1
--- src/bin/sh/exec.c:1.53	Wed Jul 25 14:42:50 2018
+++ src/bin/sh/exec.c	Thu Aug 27 09:15:38 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: exec.c,v 1.53 2018/07/25 14:42:50 kre Exp $	*/
+/*	$NetBSD: exec.c,v 1.53.2.1 2020/08/27 09:15:38 martin Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)exec.c	8.4 (Berkeley) 6/8/95";
 #else
-__RCSID("$NetBSD: exec.c,v 1.53 2018/07/25 14:42:50 kre Exp $");
+__RCSID("$NetBSD: exec.c,v 1.53.2.1 2020/08/27 09:15:38 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -667,6 +667,10 @@ loop:
 			cmdp = &loc_cmd;
 		} else
 			cmdp = cmdlookup(name, 1);
+
+		if (cmdp->cmdtype == CMDFUNCTION)
+			cmdp = &loc_cmd;
+
 		cmdp->cmdtype = CMDNORMAL;
 		cmdp->param.index = idx;
 		INTON;

Reply via email to