diff options
author | griffin <briang42@easystreet.net> | 2023-07-06 19:12:14 (GMT) |
---|---|---|
committer | griffin <briang42@easystreet.net> | 2023-07-06 19:12:14 (GMT) |
commit | 024c0aa13a3aa0d26041ea6690bf93053bd0f088 (patch) | |
tree | a7734bf90413ee00f6aad39e1c13537f305ae5f4 /generic/tclEncoding.c | |
parent | 70ca2e60fd52c6a28605129a708a4c72a6fefaab (diff) | |
parent | 3106ce90c036540cf65bee367d720242140e391a (diff) | |
download | tcl-024c0aa13a3aa0d26041ea6690bf93053bd0f088.zip tcl-024c0aa13a3aa0d26041ea6690bf93053bd0f088.tar.gz tcl-024c0aa13a3aa0d26041ea6690bf93053bd0f088.tar.bz2 |
merge trunk
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r-- | generic/tclEncoding.c | 12 |
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; |