diff options
author | dgp <dgp@users.sourceforge.net> | 2022-03-08 17:12:28 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2022-03-08 17:12:28 (GMT) |
commit | 77d395c7f814d2a2d784c06b197ea84fc03ab213 (patch) | |
tree | e09193f6fcae8020652bddfb62c31909f5a93fc7 | |
parent | 94033c98698f9311df88190fad45f190b4b829a8 (diff) | |
download | tcl-77d395c7f814d2a2d784c06b197ea84fc03ab213.zip tcl-77d395c7f814d2a2d784c06b197ea84fc03ab213.tar.gz tcl-77d395c7f814d2a2d784c06b197ea84fc03ab213.tar.bz2 |
Backport fix and test for typecasting bug in Tcl_GetUniChar().
-rw-r--r-- | generic/tclStringObj.c | 4 | ||||
-rw-r--r-- | tests/string.test | 7 |
2 files changed, 9 insertions, 2 deletions
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index d1e709c..4afd12a 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -576,7 +576,7 @@ Tcl_GetUniChar( TclNumUtfChars(stringPtr->numChars, objPtr->bytes, objPtr->length); } if (stringPtr->numChars == objPtr->length) { - return (Tcl_UniChar) objPtr->bytes[index]; + return (unsigned char) objPtr->bytes[index]; } FillUnicodeRep(objPtr); stringPtr = GET_STRING(objPtr); @@ -632,7 +632,7 @@ TclGetUCS4( TclNumUtfChars(stringPtr->numChars, objPtr->bytes, objPtr->length); } if (stringPtr->numChars == objPtr->length) { - return (Tcl_UniChar) objPtr->bytes[index]; + return (unsigned char) objPtr->bytes[index]; } FillUnicodeRep(objPtr); stringPtr = GET_STRING(objPtr); diff --git a/tests/string.test b/tests/string.test index 66eb6ad..977e875 100644 --- a/tests/string.test +++ b/tests/string.test @@ -323,6 +323,13 @@ test string-5.20 {string index, bytearray object out of bounds} { string index [binary format I* {0x50515253 0x52}] 20 } {} +test string-5.22 {string index} -constraints testbytestring -setup { + set string string +} -body { + list [scan [$string index [testbytestring \xFF] 0] %c var] $var +} -cleanup { + unset string +} -result {1 255} proc largest_int {} { # This will give us what the largest valid int on this machine is, |