Tcl Source Code

View Ticket
Login
Ticket UUID: 3202905
Title: Incorrect Tcl Interpreter Obj Result
Type: Bug Version: obsolete: 8.5.9
Submitter: cjmcdonald Created on: 2011-03-08 11:43:46
Subsystem: 45. Parsing and Eval Assigned To: dgp
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2011-03-08 22:25:53
Resolution: Fixed Closed By: dgp
    Closed on: 2011-03-08 15:25:53
Description:
There is a problem with obj results returned from an
interpreter. When the obj result is reset, a tclStringType
internal rep can be left for an empty string.  This then
gives inconsistent results for a new obj result.

The attached example program objresult_example.c
demonstrates the issue.

The problem is in ResetObjResult in tclResult.c, where it is
assumed that the obj result only needs to be reset if it is
not an empty string. Changing this so that is always clears
any internal rep fixes the problem.

This patch is against the 8.5.9 release:

*** tclResult.c.859     Wed Mar 24 15:31:48 2010
--- tclResult.c Tue Mar  8 11:21:20 2011
***************
*** 961,972 ****
        TclNewObj(objResultPtr);
        Tcl_IncrRefCount(objResultPtr);
        iPtr->objResultPtr = objResultPtr;
!     } else if (objResultPtr->bytes != tclEmptyStringRep) {
!       if (objResultPtr->bytes != NULL) {
!           ckfree((char *) objResultPtr->bytes);
        }
-       objResultPtr->bytes = tclEmptyStringRep;
-       objResultPtr->length = 0;
        TclFreeIntRep(objResultPtr);
        objResultPtr->typePtr = NULL;
      }
--- 961,974 ----
        TclNewObj(objResultPtr);
        Tcl_IncrRefCount(objResultPtr);
        iPtr->objResultPtr = objResultPtr;
!     } else {
!       if (objResultPtr->bytes != tclEmptyStringRep) {
!           if (objResultPtr->bytes != NULL) {
!               ckfree((char *) objResultPtr->bytes);
!           }
!           objResultPtr->bytes = tclEmptyStringRep;
!           objResultPtr->length = 0;
        }
        TclFreeIntRep(objResultPtr);
        objResultPtr->typePtr = NULL;
      }
User Comments: dgp added on 2011-03-08 22:25:53:

allow_comments - 1

fixed in all open branches.

dgp added on 2011-03-08 21:54:01:
Bug introduced in checkin a9ae49ef27 2007-11-10

Bad miguel!

cjmcdonald added on 2011-03-08 18:43:46:

File Added - 403697: objresult_example.c

Attachments: