#1754 May generate unlimited output

obsolete: 8.3.3
closed-duplicate
5
2002-01-21
2002-01-20
Anonymous
No

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

Discussion

    • status: open --> closed
     
    • status: closed --> closed-duplicate