summaryrefslogtreecommitdiffstats
path: root/generic/tclEncoding.c
diff options
context:
space:
mode:
authorgriffin <briang42@easystreet.net>2023-07-06 19:12:14 (GMT)
committergriffin <briang42@easystreet.net>2023-07-06 19:12:14 (GMT)
commit024c0aa13a3aa0d26041ea6690bf93053bd0f088 (patch)
treea7734bf90413ee00f6aad39e1c13537f305ae5f4 /generic/tclEncoding.c
parent70ca2e60fd52c6a28605129a708a4c72a6fefaab (diff)
parent3106ce90c036540cf65bee367d720242140e391a (diff)
downloadtcl-024c0aa13a3aa0d26041ea6690bf93053bd0f088.zip
tcl-024c0aa13a3aa0d26041ea6690bf93053bd0f088.tar.gz
tcl-024c0aa13a3aa0d26041ea6690bf93053bd0f088.tar.bz2
merge trunk
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r--generic/tclEncoding.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index cb252b3..11ba2a5 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -10,6 +10,7 @@
*/
#include "tclInt.h"
+#include <assert.h>
typedef size_t (LengthProc)(const char *src);
@@ -3476,16 +3477,13 @@ TableToUtfProc(
}
byte = *((unsigned char *) src);
if (prefixBytes[byte]) {
- src++;
- if (src >= srcEnd) {
+ if (src >= srcEnd-1) {
+ /* Prefix byte but nothing after it */
if (!(flags & TCL_ENCODING_END)) {
- /* Suffix bytes expected, don't consume prefix */
- src--;
+ /* More data to come */
result = TCL_CONVERT_MULTIBYTE;
break;
} else if (PROFILE_STRICT(flags)) {
- /* Truncation. Do not consume so error location correct */
- src--;
result = TCL_CONVERT_SYNTAX;
break;
} else if (PROFILE_REPLACE(flags)) {
@@ -3494,6 +3492,7 @@ TableToUtfProc(
ch = (unsigned) byte;
}
} else {
+ ++src;
ch = toUnicode[byte][*((unsigned char *)src)];
}
} else {
@@ -3527,6 +3526,7 @@ TableToUtfProc(
src++;
}
+ assert(src <= srcEnd);
*srcReadPtr = src - srcStart;
*dstWrotePtr = dst - dstStart;
*dstCharsPtr = numChars;