This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
is_utf8_char_slow(): Make constistent, correct docs.
authorKarl Williamson <public@khwilliamson.com>
Mon, 13 Feb 2012 20:13:02 +0000 (13:13 -0700)
committerKarl Williamson <public@khwilliamson.com>
Mon, 13 Feb 2012 20:42:54 +0000 (13:42 -0700)
This function is only used by the Perl core for very large code points,
though it is designed to be able to be used for all code points.

For any variant code points, it doesn't succeed unless the passed in
length is exactly the same as the number of bytes the code point
occupies.  The documentation says it succeeds if the length is at least
that number.  This commit updates the documentation to match the
behavior.

Also, for an invariant code point, it succeeds no matter what the
passed-in length says.  This commit changes this to be consistent with
the behavior for all other code points.

utf8.c

diff --git a/utf8.c b/utf8.c
index 5c1f7c0..2a5d93e 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -257,9 +257,9 @@ Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
 
 /*
 
-Tests if some arbitrary number of bytes begins in a valid UTF-8
+Tests if the first C<len> bytes of string C<s> form a valid UTF-8
 character.  Note that an INVARIANT (i.e. ASCII) character is a valid
-UTF-8 character.  The actual number of bytes in the UTF-8 character
+UTF-8 character.  The number of bytes in the UTF-8 character
 will be returned if it is valid, otherwise 0.
 
 This is the "slow" version as opposed to the "fast" version which is
@@ -283,7 +283,7 @@ S_is_utf8_char_slow(const U8 *s, const STRLEN len)
     PERL_ARGS_ASSERT_IS_UTF8_CHAR_SLOW;
 
     if (UTF8_IS_INVARIANT(u))
-       return 1;
+       return len == 1;
 
     if (!UTF8_IS_START(u))
        return 0;