summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2017-06-05 16:56:08 (GMT)
committerdgp <dgp@users.sourceforge.net>2017-06-05 16:56:08 (GMT)
commit67fd012128e6e76e3d745ca090075acbcfa9f258 (patch)
tree421edf8abb6f9672cf09a3060be1340406731587 /generic
parent3dbc135425996ff89f9fbe27ae9217256ba3e522 (diff)
parentaa34445f358256f4ceea959a32d4da9b1305eb43 (diff)
downloadtcl-67fd012128e6e76e3d745ca090075acbcfa9f258.zip
tcl-67fd012128e6e76e3d745ca090075acbcfa9f258.tar.gz
tcl-67fd012128e6e76e3d745ca090075acbcfa9f258.tar.bz2
[67aa9a2070] Tcl_UtfToUniChar returns single byte for invalid UTF-8 input
as documented.
Diffstat (limited to 'generic')
-rw-r--r--generic/tclUtf.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/generic/tclUtf.c b/generic/tclUtf.c
index 68119a4..fe47f0b 100644
--- a/generic/tclUtf.c
+++ b/generic/tclUtf.c
@@ -298,7 +298,9 @@ Tcl_UtfToUniChar(
*/
*chPtr = (Tcl_UniChar) (((byte & 0x1F) << 6) | (src[1] & 0x3F));
- return 2;
+ if ((*chPtr == 0) || (*chPtr > 0x7f)) {
+ return 2;
+ }
}
/*
@@ -313,7 +315,9 @@ Tcl_UtfToUniChar(
*chPtr = (Tcl_UniChar) (((byte & 0x0F) << 12)
| ((src[1] & 0x3F) << 6) | (src[2] & 0x3F));
- return 3;
+ if (*chPtr > 0x7ff) {
+ return 3;
+ }
}
/*
@@ -330,7 +334,9 @@ Tcl_UtfToUniChar(
*chPtr = (Tcl_UniChar) (((byte & 0x0E) << 18) | ((src[1] & 0x3F) << 12)
| ((src[2] & 0x3F) << 6) | (src[3] & 0x3F));
- return 4;
+ if ((*chPtr <= 0x10ffff) && (*chPtr > 0xffff)) {
+ return 4;
+ }
}
/*