diff options
author | pooryorick <com.digitalsmarties@pooryorick.com> | 2023-05-17 12:44:46 (GMT) |
---|---|---|
committer | pooryorick <com.digitalsmarties@pooryorick.com> | 2023-05-17 12:44:46 (GMT) |
commit | 00dd4a5b561cb743509bd7cb25129988a00fac4f (patch) | |
tree | 3317c4bb0a005cba8c0c8ea607fd3f120a2615e4 /generic/tclIORChan.c | |
parent | ac555b905c136e91ee92a89d6b225b9a46851e8d (diff) | |
download | tcl-00dd4a5b561cb743509bd7cb25129988a00fac4f.zip tcl-00dd4a5b561cb743509bd7cb25129988a00fac4f.tar.gz tcl-00dd4a5b561cb743509bd7cb25129988a00fac4f.tar.bz2 |
Improve TclDuplicatePureObj(), remove unnecessary increment/decrement pairs, and add more error checking.
Diffstat (limited to 'generic/tclIORChan.c')
-rw-r--r-- | generic/tclIORChan.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c index ada5768..c7cbfe5 100644 --- a/generic/tclIORChan.c +++ b/generic/tclIORChan.c @@ -580,6 +580,9 @@ TclChanCreateObjCmd( rcId = NextHandle(); rcPtr = NewReflectedChannel(interp, cmdObj, mode, rcId); + if (!rcPtr) { + return TCL_ERROR; + } /* * Invoke 'initialize' and validate that the handler is present and ok. @@ -2258,8 +2261,10 @@ NewReflectedChannel( rcPtr->mode = mode; rcPtr->interest = 0; /* Initially no interest registered */ - /* ASSERT: cmdpfxObj is a Tcl List */ - rcPtr->cmd = TclDuplicatePureObj(cmdpfxObj); + rcPtr->cmd = TclDuplicatePureObj(interp, cmdpfxObj, &tclListType.objType); + if (!rcPtr->cmd) { + return NULL; + } Tcl_IncrRefCount(rcPtr->cmd); rcPtr->methods = Tcl_NewListObj(METH_WRITE + 1, NULL); while (mn <= (int)METH_WRITE) { @@ -2396,8 +2401,10 @@ InvokeTclMethod( * before the channel id. */ - cmd = TclDuplicatePureObj(rcPtr->cmd); - + cmd = TclDuplicatePureObj(NULL, rcPtr->cmd, &tclListType.objType); + if (!cmd) { + return TCL_ERROR; + } Tcl_ListObjIndex(NULL, rcPtr->methods, method, &methObj); Tcl_ListObjAppendElement(NULL, cmd, methObj); Tcl_ListObjAppendElement(NULL, cmd, rcPtr->name); |