summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclUtf.c9
-rw-r--r--tests/utf.test11
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