This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
bytes_from_utf8(): parameter must not be NULL
authorKarl Williamson <khw@cpan.org>
Fri, 9 Jun 2017 17:44:58 +0000 (11:44 -0600)
committerKarl Williamson <khw@cpan.org>
Wed, 14 Jun 2017 17:08:24 +0000 (11:08 -0600)
The function assumes that the parameter is not NULL.  Declare that to
embed.fnc.  Also change the name to indicate that it is a pointer.

embed.fnc
proto.h
utf8.c

index f5ca638..832d96b 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -1792,7 +1792,7 @@ AipdRn    |U8*    |utf8_hop_safe  |NN const U8 *s|SSize_t off|NN const U8 *start|NN con
 ApMd   |U8*    |utf8_to_bytes  |NN U8 *s|NN STRLEN *lenp
 Apd    |int    |bytes_cmp_utf8 |NN const U8 *b|STRLEN blen|NN const U8 *u \
                                |STRLEN ulen
-ApMd   |U8*    |bytes_from_utf8|NN const U8 *s|NN STRLEN *lenp|NULLOK bool *is_utf8
+ApMd   |U8*    |bytes_from_utf8|NN const U8 *s|NN STRLEN *lenp|NN bool *is_utf8p
 ApMd   |U8*    |bytes_to_utf8  |NN const U8 *s|NN STRLEN *lenp
 ApdD   |UV     |utf8_to_uvchr  |NN const U8 *s|NULLOK STRLEN *retlen
 ApdD   |UV     |utf8_to_uvuni  |NN const U8 *s|NULLOK STRLEN *retlen
diff --git a/proto.h b/proto.h
index 06df4e6..6738544 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -256,9 +256,9 @@ PERL_CALLCONV void  Perl_boot_core_mro(pTHX);
 PERL_CALLCONV int      Perl_bytes_cmp_utf8(pTHX_ const U8 *b, STRLEN blen, const U8 *u, STRLEN ulen);
 #define PERL_ARGS_ASSERT_BYTES_CMP_UTF8        \
        assert(b); assert(u)
-PERL_CALLCONV U8*      Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8);
+PERL_CALLCONV U8*      Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8p);
 #define PERL_ARGS_ASSERT_BYTES_FROM_UTF8       \
-       assert(s); assert(lenp)
+       assert(s); assert(lenp); assert(is_utf8p)
 PERL_CALLCONV U8*      Perl_bytes_to_utf8(pTHX_ const U8 *s, STRLEN *lenp);
 #define PERL_ARGS_ASSERT_BYTES_TO_UTF8 \
        assert(s); assert(lenp)
diff --git a/utf8.c b/utf8.c
index e8e143c..aeda0d7 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -1975,17 +1975,17 @@ Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *lenp)
 =for apidoc bytes_from_utf8
 
 Converts a potentially UTF-8 encoded string C<s> of length C<*lenp> into native
-byte encoding.  On input, the boolean C<*is_utf8> gives whether or not C<s> is
+byte encoding.  On input, the boolean C<*is_utf8p> gives whether or not C<s> is
 actually encoded in UTF-8.
 
 Unlike L</utf8_to_bytes> but like L</bytes_to_utf8>, this is non-destructive of
 the input string.
 
-Do nothing if C<*is_utf8> is 0, or if there are code points in the string
-not expressible in native byte encoding.  In these cases, C<*is_utf8> and
+Do nothing if C<*is_utf8p> is 0, or if there are code points in the string
+not expressible in native byte encoding.  In these cases, C<*is_utf8p> and
 C<*lenp> are unchanged, and the return value is the original C<s>.
 
-Otherwise, C<*is_utf8> is set to 0, and the return value is a pointer to a
+Otherwise, C<*is_utf8p> is set to 0, and the return value is a pointer to a
 newly created string containing a downgraded copy of C<s>, and whose length is
 returned in C<*lenp>, updated.
 
@@ -1997,7 +1997,7 @@ value of C<*lenp> from it.
 */
 
 U8 *
-Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8)
+Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8p)
 {
     U8 *d;
     const U8 *start = s;
@@ -2006,7 +2006,7 @@ Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8)
 
     PERL_ARGS_ASSERT_BYTES_FROM_UTF8;
     PERL_UNUSED_CONTEXT;
-    if (!*is_utf8)
+    if (!*is_utf8p)
         return (U8 *)start;
 
     /* ensure valid UTF-8 and chars < 256 before converting string */
@@ -2021,7 +2021,7 @@ Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8)
         s++;
     }
 
-    *is_utf8 = FALSE;
+    *is_utf8p = FALSE;
 
     Newx(d, (*lenp) - count + 1, U8);