From 3ec501f29bdd63cb4b75f5b369d2c24505b3a6ee Mon Sep 17 00:00:00 2001 From: dgp Date: Thu, 7 May 2020 20:31:48 +0000 Subject: Same trouble with Tcl_UtfToUniCharDstring. Test and fix. --- generic/tclUtf.c | 9 +++++---- tests/utf.test | 11 ++++++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/generic/tclUtf.c b/generic/tclUtf.c index 80f3be8..7309208 100644 --- a/generic/tclUtf.c +++ b/generic/tclUtf.c @@ -453,11 +453,12 @@ Tcl_UtfToUniCharDString( p += TclUtfToUniChar(p, w); w++; } - while ((p < endPtr) && Tcl_UtfCharComplete(p, endPtr-p)) { - p += TclUtfToUniChar(p, w++); - } while (p < endPtr) { - *w++ = UCHAR(*p++); + if (Tcl_UtfCharComplete(p, endPtr-p)) { + p += TclUtfToUniChar(p, w++); + } else { + *w++ = UCHAR(*p++); + } } *w = '\0'; Tcl_DStringSetLength(dsPtr, diff --git a/tests/utf.test b/tests/utf.test index f48299d..5300328 100644 --- a/tests/utf.test +++ b/tests/utf.test @@ -1473,7 +1473,16 @@ UniCharCaseCmpTest > [format %c 0x10000] \uFFFF ucs4 UniCharCaseCmpTest > \U10000 \uFFFF {Uesc ucs4} - +test utf-26.1 {Tcl_UniCharDString} -setup { + testobj freeallvars +} -constraints {teststringobj} -cleanup { + testobj freeallvars +} -body { + teststringobj set 1 foo + teststringobj getunicode 1 + teststringobj append 1 [testbytestring barsoom\xF2\xC2\x80] 10 + scan [string index [teststringobj get 1] 11] %c +} -result 128 unset count -- cgit v0.12