From f388a5c71529a9aa4ed00cadbd0551e19c8c32bb Mon Sep 17 00:00:00 2001 From: rmax Date: Mon, 16 Jan 2006 19:31:18 +0000 Subject: * generic/tclPipe.c (FileForRedirect): Prevent nameString from being freed without having been initialized. * tests/exec.test: Added a test for the above. --- ChangeLog | 6 ++++++ generic/tclPipe.c | 9 ++++----- tests/exec.test | 8 ++++++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0aeb4cc..6b6b24d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-01-16 Reinhard Max + + * generic/tclPipe.c (FileForRedirect): Prevent nameString from + being freed without having been initialized. + * tests/exec.test: Added a test for the above. + 2006-01-12 Zoran Vasiljevic * generic/tclIOUtil.c (Tcl_FSGetInternalRep): fixed potential diff --git a/generic/tclPipe.c b/generic/tclPipe.c index 9750131..accfd62 100644 --- a/generic/tclPipe.c +++ b/generic/tclPipe.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclPipe.c,v 1.7.2.3 2005/10/05 22:09:11 andreas_kupries Exp $ + * RCS: @(#) $Id: tclPipe.c,v 1.7.2.4 2006/01/16 19:31:18 rmax Exp $ */ #include "tclInt.h" @@ -135,11 +135,10 @@ FileForRedirect(interp, spec, atOK, arg, nextArg, flags, skipPtr, closePtr, *skipPtr = 2; } name = Tcl_TranslateFileName(interp, spec, &nameString); - if (name != NULL) { - file = TclpOpenFile(name, flags); - } else { - file = NULL; + if (name == NULL) { + return NULL; } + file = TclpOpenFile(name, flags); Tcl_DStringFree(&nameString); if (file == NULL) { Tcl_AppendResult(interp, "couldn't ", diff --git a/tests/exec.test b/tests/exec.test index 0dccf37..b4d3216 100644 --- a/tests/exec.test +++ b/tests/exec.test @@ -11,7 +11,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: exec.test,v 1.16.2.6 2005/11/04 18:33:35 patthoyts Exp $ +# RCS: @(#) $Id: exec.test,v 1.16.2.7 2006/01/16 19:31:19 rmax Exp $ package require tcltest 2 namespace import -force ::tcltest::* @@ -402,7 +402,11 @@ test exec-10.20 {errors in exec invocation} {exec} { test exec-10.21 {errors in exec invocation} {exec} { list [catch {exec [interpreter] true | ~xyzzy_bad_user/x | false} msg] $msg } {1 {user "xyzzy_bad_user" doesn't exist}} - +test exec-10.22 {errors in exec invocation} \ +-constraints exec \ +-returnCodes 1 \ +-body {exec echo test > ~non_existent_user/foo/bar} \ +-result {user "non_existent_user" doesn't exist} # Commands in background. test exec-11.1 {commands in background} {exec} { -- cgit v0.12