Module Name:    src
Committed By:   joerg
Date:           Thu Jun 14 18:56:55 UTC 2012

Modified Files:
        src/bin/sh: eval.c

Log Message:
Make sure temp_path is always initialised, even if mklocal fails.
Make sure to restore localvars, even if possibly leaking memory.
Discussed with christos@


To generate a diff of this commit:
cvs rdiff -u -r1.103 -r1.104 src/bin/sh/eval.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/eval.c
diff -u src/bin/sh/eval.c:1.103 src/bin/sh/eval.c:1.104
--- src/bin/sh/eval.c:1.103	Mon Nov 14 18:24:45 2011
+++ src/bin/sh/eval.c	Thu Jun 14 18:56:54 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: eval.c,v 1.103 2011/11/14 18:24:45 christos Exp $	*/
+/*	$NetBSD: eval.c,v 1.104 2012/06/14 18:56:54 joerg Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)eval.c	8.9 (Berkeley) 6/8/95";
 #else
-__RCSID("$NetBSD: eval.c,v 1.103 2011/11/14 18:24:45 christos Exp $");
+__RCSID("$NetBSD: eval.c,v 1.104 2012/06/14 18:56:54 joerg Exp $");
 #endif
 #endif /* not lint */
 
@@ -984,6 +984,7 @@ normal_fork:
 		savehandler = handler;
 		savecmdname = commandname;
 		handler = &jmploc;
+		temp_path = 0;
 		if (!setjmp(jmploc.loc)) {
 			/* We need to ensure the command hash table isn't
 			 * corruped by temporary PATH assignments.
@@ -993,10 +994,9 @@ normal_fork:
 			    cmdentry.u.bltin == typecmd)) {
 				savelocalvars = localvars;
 				localvars = 0;
-				mklocal(path - 5 /* PATH= */, 0);
 				temp_path = 1;
-			} else
-				temp_path = 0;
+				mklocal(path - 5 /* PATH= */, 0);
+			}
 			redirect(cmd->ncmd.redirect, mode);
 
 			/* exec is a special builtin, but needs this list... */

Reply via email to