#1758 Problems writing iso2022-jp

obsolete: 8.3.3
closed-fixed
5
2002-01-21
2002-01-21
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

  • Martin Forssen

    Martin Forssen - 2002-01-21
     
  • Martin Forssen

    Martin Forssen - 2002-01-21
    • status: open --> open-duplicate
     
  • Martin Forssen

    Martin Forssen - 2002-01-21

    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

     
  • Andreas Kupries

    Andreas Kupries - 2002-01-21

    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 :)

     
  • Andreas Kupries

    Andreas Kupries - 2002-01-21

    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

    Andreas Kupries - 2002-01-21

    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

    Andreas Kupries - 2002-01-21

    Fix 8.3.4, v0, unified diff

     
  • Andreas Kupries

    Andreas Kupries - 2002-01-21

    Fix 8.4, v0, unified diff

     
  • Andreas Kupries

    Andreas Kupries - 2002-01-21

    Logged In: YES
    user_id=75003

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

     
  • Andreas Kupries

    Andreas Kupries - 2002-01-21
    • status: open-duplicate --> closed-fixed
     

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

JavaScript is required for this form.





No, thanks