This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Deprecate calling isFOO_utf8() with malformed
authorKarl Williamson <public@khwilliamson.com>
Sun, 23 Dec 2012 17:03:16 +0000 (10:03 -0700)
committerKarl Williamson <public@khwilliamson.com>
Sun, 23 Dec 2012 17:53:36 +0000 (10:53 -0700)
commit281235491e0eef7be051126b2c99109c4f5332be
tree4a554c8dedb3aeae2eea6730b635aaf2a200e5ba
parenta37c82b6b1246893f697942026f005f7e60ec399
Deprecate calling isFOO_utf8() with malformed

handy.h has character classification macros to determine if a UTF-8
encoded character is of a given type FOO, such as isALPHA_utf8(), etc.
Code that calls these should have first made sure that the parameter is
legal UTF-8.  Prior to this patch, false was silently returned for all
illegal UTF-8.  Now, in most instances, a deprecation warning is raised.
This is to catch bugs, and prepare for eventual elimination of this
check, which fails to catch read-off-end-of-buffer malformations anyway.
(One idea would be to leave the check in for DEBUGGING builds.)

The cases where no deprecation warning is raised as a result of this
commit is for the classes where the character does not have to be
converted to a code point for its inclusion to be determined.  For
example, if malformed UTF-8 is checked to see if it is ASCII, we only
need to check that it is one of the 128 ASCII characters.  If it isn't,
we don't bother to see if it is malformed or not.  There are other
cases, as well, such as with isSPACE(), where we check if the UTF-8 is
one of a very finite set, without checking for malformedness.

This commit causes a number of apparent bugs to be shown by the Perl
test suite.  These do not cause actual failures.
pod/perldiag.pod
utf8.c