diff options
author | dgp <dgp@users.sourceforge.net> | 2003-11-05 20:52:38 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2003-11-05 20:52:38 (GMT) |
commit | 759f6f34479df774f01cd5f34da435bb51dfee21 (patch) | |
tree | b9b6cfff34bf9f514e751d6b1bdedf8ff7de4c0f /generic/tclEncoding.c | |
parent | 701d1c58d8cd4bdfbb46baa4b55521874532e320 (diff) | |
download | tcl-759f6f34479df774f01cd5f34da435bb51dfee21.zip tcl-759f6f34479df774f01cd5f34da435bb51dfee21.tar.gz tcl-759f6f34479df774f01cd5f34da435bb51dfee21.tar.bz2 |
* generic/tclEncoding.c (TclFindEncodings): Normalize the path
of the executable before passing to TclpInitLibraryPath() to avoid
buggy handling of paths containing "..". [Bug 832657]
* tests/unixInit.test (unixInit-2.10): New test for fixed bug.
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r-- | generic/tclEncoding.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c index 576a479..87f4669 100644 --- a/generic/tclEncoding.c +++ b/generic/tclEncoding.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclEncoding.c,v 1.16 2003/02/21 02:40:58 hobbs Exp $ + * RCS: @(#) $Id: tclEncoding.c,v 1.16.2.1 2003/11/05 20:52:39 dgp Exp $ */ #include "tclInt.h" @@ -2827,8 +2827,7 @@ TclFindEncodings(argv0) CONST char *argv0; /* Name of executable from argv[0] to main() * in native multi-byte encoding. */ { - char *native; - Tcl_Obj *pathPtr; + Tcl_Obj *pathPtr, *normPtr; Tcl_DString libPath, buffer; if (encodingsInitialized == 0) { @@ -2846,8 +2845,13 @@ TclFindEncodings(argv0) encodingsInitialized = 1; - native = TclpFindExecutable(argv0); - TclpInitLibraryPath(native); + pathPtr = Tcl_NewStringObj(TclpFindExecutable(argv0), -1); + Tcl_IncrRefCount(pathPtr); + normPtr = Tcl_FSGetNormalizedPath(NULL, pathPtr); + Tcl_IncrRefCount(normPtr); + Tcl_DecrRefCount(pathPtr); + TclpInitLibraryPath(Tcl_GetString(normPtr)); + Tcl_DecrRefCount(normPtr); /* * The library path was set in the TclpInitLibraryPath routine. |