krb5 commit: Avoid small read overrun in UTF8 normalization

[email protected]
Newsgroups gmane.comp.encryption.kerberos.cvs
Message-ID <[email protected]>
https://github.com/krb5/krb5/commit/fb9cf8cfbf8da0d160cb61250b952f2b8e5484f4
commit fb9cf8cfbf8da0d160cb61250b952f2b8e5484f4
Author: Greg Hudson <[email protected]>
Date:   Wed Oct 12 00:27:17 2022 -0400

    Avoid small read overrun in UTF8 normalization
    
    In krb5int_utf8_normalize(), check the length of the current character
    against the buffer length before reading more than one byte.  Credit
    to OSS-Fuzz for discovering the overrun.
    
    ticket: 9072 (new)

 src/lib/krb5/unicode/ucstr.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/lib/krb5/unicode/ucstr.c b/src/lib/krb5/unicode/ucstr.c
index 21030bf25..e3ed9bc64 100644
--- a/src/lib/krb5/unicode/ucstr.c
+++ b/src/lib/krb5/unicode/ucstr.c
@@ -199,6 +199,12 @@ krb5int_utf8_normalize(
 	/* s[i] is non-ascii */
 	/* convert everything up to next ascii to ucs-4 */
 	while (i < len) {
+	    /* KRB5_UTF8_CHARLEN only looks at the first byte; use it to guard
+	     * against small read overruns. */
+	    if (KRB5_UTF8_CHARLEN(s + i) > len - i) {
+		retval = KRB5_ERR_INVALID_UTF8;
+		goto cleanup;
+	    }
 	    clen = KRB5_UTF8_CHARLEN2(s + i, clen);
 	    if (clen == 0) {
 		retval = KRB5_ERR_INVALID_UTF8;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.