utf8.c: No need to check for UTF-8 malformations
authorKarl Williamson <public@khwilliamson.com>
Fri, 29 Mar 2013 19:34:59 +0000 (13:34 -0600)
committerKarl Williamson <public@khwilliamson.com>
Thu, 29 Aug 2013 15:56:04 +0000 (09:56 -0600)
This function assumes that the input is well-formed UTF-8, even though
until this commit, the prefatory comments didn't say so.  The API does
not pass the buffer length, so there is no way it could check for
reading off the end of the buffer.  One code path already calls
valid_utf8_to_uvchr(); this changes the remaining code path to correspond.

utf8.c

diff --git a/utf8.c b/utf8.c
index 0d1e8c9..e7cca97 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -3118,8 +3118,8 @@ Perl__core_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv, I32 m
 /* Note:
  * Returns the value of property/mapping C<swash> for the first character
  * of the string C<ptr>. If C<do_utf8> is true, the string C<ptr> is
- * assumed to be in utf8. If C<do_utf8> is false, the string C<ptr> is
- * assumed to be in native 8-bit encoding. Caches the swatch in C<swash>.
+ * assumed to be in well-formed utf8. If C<do_utf8> is false, the string C<ptr>
+ * is assumed to be in native 8-bit encoding. Caches the swatch in C<swash>.
  *
  * A "swash" is a hash which contains initially the keys/values set up by
  * SWASHNEW.  The purpose is to be able to completely represent a Unicode
@@ -3224,9 +3224,7 @@ Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8)
        /* If not cached, generate it via swatch_get */
        if (!svp || !SvPOK(*svp)
                 || !(tmps = (const U8*)SvPV_const(*svp, slen))) {
-           const UV code_point = utf8n_to_uvchr(ptr, UTF8_MAXBYTES, 0,
-                                          ckWARN(WARN_UTF8) ?
-                                          0 : UTF8_ALLOW_ANY);
+            const UV code_point = valid_utf8_to_uvchr(ptr, NULL);
            swatch = swatch_get(swash,
                    /* On EBCDIC & ~(0xA0-1) isn't a useful thing to do */
                                (klen) ? (code_point & ~((UV)needents - 1)) : 0,