This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
utf8.c: Make safer some deprecated functions
authorKarl Williamson <khw@cpan.org>
Wed, 25 Jul 2018 03:28:42 +0000 (21:28 -0600)
committerKarl Williamson <khw@cpan.org>
Fri, 3 Aug 2018 19:13:24 +0000 (13:13 -0600)
This function is a common function, only called from various deprecated
functions, but they may be moved to ppport.h.  They are lacking a length
parameter, so malformed UTF-8 may cause them to read beyond the buffer.
This commit causes this common function to not read beyond a NUL
character, which makes all its callers safe for the common case that
the input is a NUL-terminated C string.

utf8.c

diff --git a/utf8.c b/utf8.c
index a4ceb35..ceb8ed8 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -3649,7 +3649,10 @@ S_check_and_deprecate(pTHX_ const U8 *p,
 
     if (*e == NULL) {
         utf8n_flags = _UTF8_NO_CONFIDENCE_IN_CURLEN;
-        *e = p + UTF8SKIP(p);
+
+        /* strnlen() makes this function safe for the common case of
+         * NUL-terminated strings */
+        *e = p + my_strnlen((char *) p, UTF8SKIP(p));
 
         /* For mathoms.c calls, we use the function name we know is stored
          * there.  It could be part of a larger path */