ApPR |bool |is_uni_punct_lc|UV c
ApPR |bool |is_uni_xdigit_lc|UV c
Anpd |bool |is_ascii_string|NN const U8 *s|STRLEN len
-Anpd |STRLEN |is_utf8_char |NN const U8 *s
+AnpdD |STRLEN |is_utf8_char |NN const U8 *s
Anpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end
Anpd |bool |is_utf8_string |NN const U8 *s|STRLEN len
Anpdmb |bool |is_utf8_string_loc|NN const U8 *s|STRLEN len|NULLOK const U8 **p
assert(p)
PERL_CALLCONV STRLEN Perl_is_utf8_char(const U8 *s)
+ __attribute__deprecated__
__attribute__nonnull__(1);
#define PERL_ARGS_ASSERT_IS_UTF8_CHAR \
assert(s)
/*
=for apidoc is_utf8_char
+DEPRECATED!
+
Tests if some arbitrary number of bytes begins in a valid UTF-8
character. Note that an INVARIANT (i.e. ASCII on non-EBCDIC machines)
character is a valid UTF-8 character. The actual number of bytes in the UTF-8
character will be returned if it is valid, otherwise 0.
-WARNING: use only if you *know* that C<s> has at least either UTF8_MAXBYTES or
-UTF8SKIP(s) bytes.
+This function is deprecated due to the possibility that malformed input could
+cause reading beyond the end of the input buffer. Use C<is_utf8_char_buf>
+instead.
=cut */
+
STRLEN
Perl_is_utf8_char(const U8 *s)
{
PERL_ARGS_ASSERT_IS_UTF8_CHAR;
- /* Assumes we have enough space */
+ /* Assumes we have enough space, which is why this is deprecated */
return is_utf8_char_buf(s, s + UTF8SKIP(s));
}