This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
mathoms.c: Make safer a deprecated function
authorKarl Williamson <khw@cpan.org>
Wed, 25 Jul 2018 03:41:41 +0000 (21:41 -0600)
committerKarl Williamson <khw@cpan.org>
Fri, 3 Aug 2018 19:13:24 +0000 (13:13 -0600)
This function is deprecated because it is lacking a length parameter, so
malformed UTF-8 may cause it to read beyond the buffer.  This commit
causes it to not read beyond a NUL character, which makes it safe for
the common case that the input is a C string.

mathoms.c

index ed466c2..59d8aea 100644 (file)
--- a/mathoms.c
+++ b/mathoms.c
@@ -1660,8 +1660,9 @@ Perl_is_utf8_char(const U8 *s)
 {
     PERL_ARGS_ASSERT_IS_UTF8_CHAR;
 
-    /* Assumes we have enough space, which is why this is deprecated */
-    return isUTF8_CHAR(s, s + UTF8SKIP(s));
+    /* Assumes we have enough space, which is why this is deprecated.  But the
+     * strnlen() makes it safe for the common case of NUL-terminated strings */
+    return isUTF8_CHAR(s, s + strnlen((char *) s, UTF8SKIP(s)));
 }
 
 /*