From 391bf996873721fdcb8d68003d96121b378d2654 Mon Sep 17 00:00:00 2001 From: dgp Date: Wed, 6 May 2020 19:22:25 +0000 Subject: Restore safe calls of Invalid(). --- generic/tclUtf.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/generic/tclUtf.c b/generic/tclUtf.c index 199ff83..24ec3d2 100644 --- a/generic/tclUtf.c +++ b/generic/tclUtf.c @@ -659,9 +659,6 @@ Tcl_UtfNext( int left; const char *next; - if (Invalid(src)) { - return src + 1; - } left = totalBytes[UCHAR(*src)]; next = src + 1; while (--left) { @@ -675,6 +672,16 @@ Tcl_UtfNext( } next++; } + /* + * Call Invalid() here only if required conditions are met: + * src[0] is known a lead byte. + * src[1] is known a trail byte. + * Especially important to prevent calls when src[0] == '\xF8' or '\xFC' + * See tests utf-6.37 through utf-6.43 through valgrind or similar tool. + */ + if ((next == src + 1) || Invalid(src)) { + return src + 1; + } return next; } -- cgit v0.12