Tcl Source Code

View Ticket
Login
Ticket UUID: 506297
Title: Problems writing iso2022-jp
Type: Bug Version: obsolete: 8.3.3
Submitter: ruric Created on: 2002-01-21 05:46:15
Subsystem: 24. Channel Commands Assigned To: andreas_kupries
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2002-01-22 03:38:49
Resolution: Fixed Closed By: andreas_kupries
    Closed on: 2002-01-21 20:38:49
Description:
This happens on tcl8.3.4 (also tested on 8.3.3) on Linux.

I have a channel open for writing with encoding
iso2022-jp. When I "puts" a certain string tcl gets
stuck in a loop and the output file starts growing
indefinitely. The problem can be demonstrated by the
following script:

set string [format %s%c [string repeat " " 4094] 12399]
set f [open out w 0644]
fconfigure $f -encoding iso2022-jp
puts -nonewline $f $string
close $f

This script will, when executed, never get past teh
puts statement and the outfile will start to grow (fast:-).

The problem lies in WriteChars in tclIO.c. When
Tcl_UtfToExternal is called with TCL_ENCODING_START set
among the flags, then it will always generate at least
three bytes (assuming the output encoding is
iso2022-jp).  However it did not consume any of the
characters in the input buffer (at least not if
TCL_ENCODING_END is clear). But the logic in WriteChars
thinks that since it generated output we shoudl call it
again...

The attached patch fixes this by removing the
TCL_ENCODING_START bit from flags after the first call
to Tcl_UtfToExternal.
User Comments: andreas_kupries added on 2002-01-22 03:38:49:
Logged In: YES 
user_id=75003

Committed to head and core-8-3-1-branch.

andreas_kupries added on 2002-01-22 03:36:39:

File Added - 16497: 506297-84.diff

andreas_kupries added on 2002-01-22 03:36:04:

File Added - 16496: 506297-834.diff

Logged In: YES 
user_id=75003

Enclosing the official patches. Additional comments in the 
code explaining the problem and the fix. Additional test in 
the testsuite to check for this problem.

andreas_kupries added on 2002-01-22 02:52:38:
Logged In: YES 
user_id=75003

* Confirmed behaviour for 8.3.4 and 8.4cvs

After the fix an outfile of size 4105
bytes is generated. Checksumming:

[andreask@pliers 84]$ cksum out
1762614785 4105 out

[andreask@pliers 84]$ md5sum out
b14544da022231b9116e2c4ca1acb7c5  out

andreas_kupries added on 2002-01-21 13:14:39:
Logged In: YES 
user_id=75003

Yep. I closed the others already. I will take this as the
main report, simply because here the submitter is not
Nobody/Anonymous :)

ruric added on 2002-01-21 12:57:07:
Logged In: YES 
user_id=433503

OOPS, it seems as sourceforge actually inserted this into
the bug-database even through it gave men an error. At least
that applies to the earlier three copies now in there(:-().

So currently there are four reports for this bug:  506189
506292 506296 and this one

ruric added on 2002-01-21 12:46:16:

File Added - 16459: patch

Attachments: