diff options
author | jan.nijtmans <jan.nijtmans@noemail.net> | 2012-12-29 09:16:43 (GMT) |
---|---|---|
committer | jan.nijtmans <jan.nijtmans@noemail.net> | 2012-12-29 09:16:43 (GMT) |
commit | d14e7a3061e18ba59349ecef3b9e6101057d7128 (patch) | |
tree | d39e09a819b1d12d98bc6bf4dbf3f72ccac830ae /generic/tclListObj.c | |
parent | 97a6a5df10f10a03c2511db7ac642eed1c10fb51 (diff) | |
parent | a8a7c4cf7dce81b05991fe6e9d031d6995bad9fe (diff) | |
download | tcl-d14e7a3061e18ba59349ecef3b9e6101057d7128.zip tcl-d14e7a3061e18ba59349ecef3b9e6101057d7128.tar.gz tcl-d14e7a3061e18ba59349ecef3b9e6101057d7128.tar.bz2 |
restore refcounts as they were before the Tcl_ListObjReplace call, in the error situation.
In Tcl9, make this a true Tcl_DecrRefCount, which properly cleans objects with refCount 0
FossilOrigin-Name: b7ca02496d4914cbdb4604ea8c440e9b8d1ccaf4
Diffstat (limited to 'generic/tclListObj.c')
-rw-r--r-- | generic/tclListObj.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/generic/tclListObj.c b/generic/tclListObj.c index 1166759..20b6ec1 100644 --- a/generic/tclListObj.c +++ b/generic/tclListObj.c @@ -906,6 +906,14 @@ Tcl_ListObjReplace( listRepPtr = AttemptNewList(interp, newMax, NULL); if (listRepPtr == NULL) { + for (i = 0; i < objc; i++) { + /* See bug 3598580 */ +#if TCL_MAJOR_VERSION > 8 + Tcl_DecrRefCount(objv[i]); +#else + objv[i]->refCount--; +#endif + } return TCL_ERROR; } |