diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | generic/tclVar.c | 14 | ||||
-rw-r--r-- | tests/var.test | 17 |
3 files changed, 35 insertions, 2 deletions
@@ -1,3 +1,9 @@ +2003-05-12 Miguel Sofer <msofer@users.sf.net> + + * generic/tclVar.c (TclObjLookupVar): [Bug 735335] temporary fix, + disabling usage of tclNsVarNameType. + * tests/var.test (var-15.1): test for [Bug 735335] + 2003-05-10 Jeff Hobbs <jeffh@ActiveState.com> * win/tclWinSerial.c (SerialCloseProc): correct mem leak on diff --git a/generic/tclVar.c b/generic/tclVar.c index aab35cc..94afe41 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -15,7 +15,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclVar.c,v 1.72 2003/04/28 12:34:31 dkf Exp $ + * RCS: @(#) $Id: tclVar.c,v 1.73 2003/05/12 17:20:41 msofer Exp $ */ #include "tclInt.h" @@ -551,6 +551,17 @@ TclObjLookupVar(interp, part1Ptr, part2, flags, msg, createPart1, createPart2, procPtr->refCount++; part1Ptr->internalRep.twoPtrValue.ptr1 = (VOID *) procPtr; part1Ptr->internalRep.twoPtrValue.ptr2 = (VOID *) index; +#if 0 + /* + * TEMPORARYLY DISABLED tclNsVarNameType + * + * This is a stop-gap fix for [Bug 735335]; it may not address the + * real issue (which I haven't pinned down yet), but it avoids the + * segfault in the test case. + * This optimisation will hopefully be turned back on soon. + * Miguel Sofer, 2003-05-12 + */ + } else if (index > -3) { Namespace *nsPtr; @@ -559,6 +570,7 @@ TclObjLookupVar(interp, part1Ptr, part2, flags, msg, createPart1, createPart2, part1Ptr->typePtr = &tclNsVarNameType; part1Ptr->internalRep.twoPtrValue.ptr1 = (VOID *) nsPtr; part1Ptr->internalRep.twoPtrValue.ptr2 = (VOID *) varPtr; +#endif } else { /* * At least mark part1Ptr as already parsed. diff --git a/tests/var.test b/tests/var.test index 7fff348..8969384 100644 --- a/tests/var.test +++ b/tests/var.test @@ -14,7 +14,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: var.test,v 1.21 2003/03/24 00:49:00 msofer Exp $ +# RCS: @(#) $Id: var.test,v 1.22 2003/05/12 17:20:41 msofer Exp $ # if {[lsearch [namespace children] ::tcltest] == -1} { @@ -680,6 +680,21 @@ test var-14.1 {array names syntax} -body { array names foo bar baz snafu } -returnCodes 1 -match glob -result * +test var-15.1 {segfault in [unset], [Bug 735335]} { + proc A { name } { + upvar $name var + set var $name + } + # + # Note that the variable name has to be + # unused previously for the segfault to + # be triggered. + # + namespace eval test A useSomeUnlikelyNameHere + namespace eval test unset useSomeUnlikelyNameHere +} {} + + catch {namespace delete ns} catch {unset arr} catch {unset v} |