summaryrefslogtreecommitdiffstats
path: root/generic/tclVar.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2019-05-10 07:46:32 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2019-05-10 07:46:32 (GMT)
commit7b90ffbb489e5b0b09f23a6296f69f070127fd57 (patch)
treeb4b8b874d4101f811de99438daa6d037daa506f1 /generic/tclVar.c
parentf9eb1833d2785265d8dc52992750ef10d9cc1c19 (diff)
parentb1139d3d2099aad8ad1981deaa0f689e1b4c322a (diff)
downloadtcl-7b90ffbb489e5b0b09f23a6296f69f070127fd57.zip
tcl-7b90ffbb489e5b0b09f23a6296f69f070127fd57.tar.gz
tcl-7b90ffbb489e5b0b09f23a6296f69f070127fd57.tar.bz2
merge 8.7
Diffstat (limited to 'generic/tclVar.c')
-rw-r--r--generic/tclVar.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/generic/tclVar.c b/generic/tclVar.c
index 3271935..e400369 100644
--- a/generic/tclVar.c
+++ b/generic/tclVar.c
@@ -722,7 +722,7 @@ TclObjLookupVarEx(
Tcl_Obj *cachedNamePtr = localName(varFramePtr, index);
if (part1Ptr == cachedNamePtr) {
- cachedNamePtr = NULL;
+ LocalSetIntRep(part1Ptr, index, NULL);
} else {
/*
* [80304238ac] Trickiness here. We will store and incr the
@@ -735,6 +735,14 @@ TclObjLookupVarEx(
* cachedNamePtr and leave it as string only. This is
* radical and destructive, so a better idea would be welcome.
*/
+
+ /*
+ * Firstly set cached local var reference (avoid free before set,
+ * see [45b9faf103f2])
+ */
+ LocalSetIntRep(part1Ptr, index, cachedNamePtr);
+
+ /* Then wipe it */
TclFreeIntRep(cachedNamePtr);
/*
@@ -744,7 +752,6 @@ TclObjLookupVarEx(
*/
LocalSetIntRep(cachedNamePtr, index, NULL);
}
- LocalSetIntRep(part1Ptr, index, cachedNamePtr);
} else {
/*
* At least mark part1Ptr as already parsed.