diff options
author | dgp <dgp@users.sourceforge.net> | 2018-01-04 02:32:46 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2018-01-04 02:32:46 (GMT) |
commit | 6c799d891d69e04b9e0f32ca59719b4b23dc311a (patch) | |
tree | 5936604aa53ceb6b5b41aa6fed1d8403f4735009 /generic/tclPkg.c | |
parent | 4a038240c4966cfaa72e90901a3a9951f6f3d020 (diff) | |
download | tcl-6c799d891d69e04b9e0f32ca59719b4b23dc311a.zip tcl-6c799d891d69e04b9e0f32ca59719b4b23dc311a.tar.gz tcl-6c799d891d69e04b9e0f32ca59719b4b23dc311a.tar.bz2 |
Minimal fixes to stop the [package files] machinery writing to freed mem.
This contribution needs a careful review from someone who actually knows
how Tcl_Preserve, etc. work.
Diffstat (limited to 'generic/tclPkg.c')
-rw-r--r-- | generic/tclPkg.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/generic/tclPkg.c b/generic/tclPkg.c index cdf9a8b..288d5dc 100644 --- a/generic/tclPkg.c +++ b/generic/tclPkg.c @@ -948,6 +948,7 @@ Tcl_PackageObjCmd( Tcl_EventuallyFree(availPtr->script, TCL_DYNAMIC); if (availPtr->pkgIndex) { Tcl_EventuallyFree(availPtr->pkgIndex, TCL_DYNAMIC); + availPtr->pkgIndex = NULL; } ckfree(availPtr); } @@ -1001,6 +1002,7 @@ Tcl_PackageObjCmd( Tcl_EventuallyFree(availPtr->script, TCL_DYNAMIC); if (availPtr->pkgIndex) { Tcl_EventuallyFree(availPtr->pkgIndex, TCL_DYNAMIC); + availPtr->pkgIndex = NULL; } break; } @@ -1012,7 +1014,7 @@ Tcl_PackageObjCmd( } if (availPtr == NULL) { availPtr = ckalloc(sizeof(PkgAvail)); - availPtr->pkgIndex = 0; + availPtr->pkgIndex = NULL; DupBlock(availPtr->version, argv3, (unsigned) length + 1); if (prevPtr == NULL) { @@ -1384,6 +1386,7 @@ TclFreePackageInfo( Tcl_EventuallyFree(availPtr->script, TCL_DYNAMIC); if (availPtr->pkgIndex) { Tcl_EventuallyFree(availPtr->pkgIndex, TCL_DYNAMIC); + availPtr->pkgIndex = NULL; } ckfree(availPtr); } |