summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--generic/tclVar.c14
-rw-r--r--tests/var.test17
3 files changed, 35 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 650ae6c..6d50b25 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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}