This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
utf8.c: Fix bugs with overlongs combined with other malformations.
[perl5.git] / utf8.c
1 /*    utf8.c
2  *
3  *    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4  *    by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  */
10
11 /*
12  * 'What a fix!' said Sam.  'That's the one place in all the lands we've ever
13  *  heard of that we don't want to see any closer; and that's the one place
14  *  we're trying to get to!  And that's just where we can't get, nohow.'
15  *
16  *     [p.603 of _The Lord of the Rings_, IV/I: "The Taming of Sméagol"]
17  *
18  * 'Well do I understand your speech,' he answered in the same language;
19  * 'yet few strangers do so.  Why then do you not speak in the Common Tongue,
20  *  as is the custom in the West, if you wish to be answered?'
21  *                           --Gandalf, addressing Théoden's door wardens
22  *
23  *     [p.508 of _The Lord of the Rings_, III/vi: "The King of the Golden Hall"]
24  *
25  * ...the travellers perceived that the floor was paved with stones of many
26  * hues; branching runes and strange devices intertwined beneath their feet.
27  *
28  *     [p.512 of _The Lord of the Rings_, III/vi: "The King of the Golden Hall"]
29  */
30
31 #include "EXTERN.h"
32 #define PERL_IN_UTF8_C
33 #include "perl.h"
34 #include "invlist_inline.h"
35
36 static const char malformed_text[] = "Malformed UTF-8 character";
37 static const char unees[] =
38                         "Malformed UTF-8 character (unexpected end of string)";
39 static const char cp_above_legal_max[] =
40  "Use of code point 0x%" UVXf " is deprecated; the permissible max is 0x%" UVXf ". This will be fatal in Perl 5.28";
41
42 #define MAX_NON_DEPRECATED_CP ((UV) (IV_MAX))
43
44 /*
45 =head1 Unicode Support
46 These are various utility functions for manipulating UTF8-encoded
47 strings.  For the uninitiated, this is a method of representing arbitrary
48 Unicode characters as a variable number of bytes, in such a way that
49 characters in the ASCII range are unmodified, and a zero byte never appears
50 within non-zero characters.
51
52 =cut
53 */
54
55 void
56 Perl__force_out_malformed_utf8_message(pTHX_
57             const U8 *const p,      /* First byte in UTF-8 sequence */
58             const U8 * const e,     /* Final byte in sequence (may include
59                                        multiple chars */
60             const U32 flags,        /* Flags to pass to utf8n_to_uvchr(),
61                                        usually 0, or some DISALLOW flags */
62             const bool die_here)    /* If TRUE, this function does not return */
63 {
64     /* This core-only function is to be called when a malformed UTF-8 character
65      * is found, in order to output the detailed information about the
66      * malformation before dieing.  The reason it exists is for the occasions
67      * when such a malformation is fatal, but warnings might be turned off, so
68      * that normally they would not be actually output.  This ensures that they
69      * do get output.  Because a sequence may be malformed in more than one
70      * way, multiple messages may be generated, so we can't make them fatal, as
71      * that would cause the first one to die.
72      *
73      * Instead we pretend -W was passed to perl, then die afterwards.  The
74      * flexibility is here to return to the caller so they can finish up and
75      * die themselves */
76     U32 errors;
77
78     PERL_ARGS_ASSERT__FORCE_OUT_MALFORMED_UTF8_MESSAGE;
79
80     ENTER;
81     SAVEI8(PL_dowarn);
82     SAVESPTR(PL_curcop);
83
84     PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
85     if (PL_curcop) {
86         PL_curcop->cop_warnings = pWARN_ALL;
87     }
88
89     (void) utf8n_to_uvchr_error(p, e - p, NULL, flags & ~UTF8_CHECK_ONLY, &errors);
90
91     LEAVE;
92
93     if (! errors) {
94         Perl_croak(aTHX_ "panic: _force_out_malformed_utf8_message should"
95                          " be called only when there are errors found");
96     }
97
98     if (die_here) {
99         Perl_croak(aTHX_ "Malformed UTF-8 character (fatal)");
100     }
101 }
102
103 /*
104 =for apidoc uvoffuni_to_utf8_flags
105
106 THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
107 Instead, B<Almost all code should use L</uvchr_to_utf8> or
108 L</uvchr_to_utf8_flags>>.
109
110 This function is like them, but the input is a strict Unicode
111 (as opposed to native) code point.  Only in very rare circumstances should code
112 not be using the native code point.
113
114 For details, see the description for L</uvchr_to_utf8_flags>.
115
116 =cut
117 */
118
119 /* All these formats take a single UV code point argument */
120 const char surrogate_cp_format[] = "UTF-16 surrogate U+%04" UVXf;
121 const char nonchar_cp_format[]   = "Unicode non-character U+%04" UVXf
122                                    " is not recommended for open interchange";
123 const char super_cp_format[]     = "Code point 0x%" UVXf " is not Unicode,"
124                                    " may not be portable";
125 const char above_31_bit_cp_format[] = "Code point 0x%" UVXf " is not"
126                                       " Unicode, and not portable";
127
128 #define HANDLE_UNICODE_SURROGATE(uv, flags)                         \
129     STMT_START {                                                    \
130         if (flags & UNICODE_WARN_SURROGATE) {                       \
131             Perl_ck_warner_d(aTHX_ packWARN(WARN_SURROGATE),        \
132                                    surrogate_cp_format, uv);        \
133         }                                                           \
134         if (flags & UNICODE_DISALLOW_SURROGATE) {                   \
135             return NULL;                                            \
136         }                                                           \
137     } STMT_END;
138
139 #define HANDLE_UNICODE_NONCHAR(uv, flags)                           \
140     STMT_START {                                                    \
141         if (flags & UNICODE_WARN_NONCHAR) {                         \
142             Perl_ck_warner_d(aTHX_ packWARN(WARN_NONCHAR),          \
143                                    nonchar_cp_format, uv);          \
144         }                                                           \
145         if (flags & UNICODE_DISALLOW_NONCHAR) {                     \
146             return NULL;                                            \
147         }                                                           \
148     } STMT_END;
149
150 /*  Use shorter names internally in this file */
151 #define SHIFT   UTF_ACCUMULATION_SHIFT
152 #undef  MARK
153 #define MARK    UTF_CONTINUATION_MARK
154 #define MASK    UTF_CONTINUATION_MASK
155
156 U8 *
157 Perl_uvoffuni_to_utf8_flags(pTHX_ U8 *d, UV uv, const UV flags)
158 {
159     PERL_ARGS_ASSERT_UVOFFUNI_TO_UTF8_FLAGS;
160
161     if (OFFUNI_IS_INVARIANT(uv)) {
162         *d++ = LATIN1_TO_NATIVE(uv);
163         return d;
164     }
165
166     if (uv <= MAX_UTF8_TWO_BYTE) {
167         *d++ = I8_TO_NATIVE_UTF8(( uv >> SHIFT) | UTF_START_MARK(2));
168         *d++ = I8_TO_NATIVE_UTF8(( uv           & MASK) |   MARK);
169         return d;
170     }
171
172     /* Not 2-byte; test for and handle 3-byte result.   In the test immediately
173      * below, the 16 is for start bytes E0-EF (which are all the possible ones
174      * for 3 byte characters).  The 2 is for 2 continuation bytes; these each
175      * contribute SHIFT bits.  This yields 0x4000 on EBCDIC platforms, 0x1_0000
176      * on ASCII; so 3 bytes covers the range 0x400-0x3FFF on EBCDIC;
177      * 0x800-0xFFFF on ASCII */
178     if (uv < (16 * (1U << (2 * SHIFT)))) {
179         *d++ = I8_TO_NATIVE_UTF8(( uv >> ((3 - 1) * SHIFT)) | UTF_START_MARK(3));
180         *d++ = I8_TO_NATIVE_UTF8(((uv >> ((2 - 1) * SHIFT)) & MASK) |   MARK);
181         *d++ = I8_TO_NATIVE_UTF8(( uv  /* (1 - 1) */        & MASK) |   MARK);
182
183 #ifndef EBCDIC  /* These problematic code points are 4 bytes on EBCDIC, so
184                    aren't tested here */
185         /* The most likely code points in this range are below the surrogates.
186          * Do an extra test to quickly exclude those. */
187         if (UNLIKELY(uv >= UNICODE_SURROGATE_FIRST)) {
188             if (UNLIKELY(   UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv)
189                          || UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv)))
190             {
191                 HANDLE_UNICODE_NONCHAR(uv, flags);
192             }
193             else if (UNLIKELY(UNICODE_IS_SURROGATE(uv))) {
194                 HANDLE_UNICODE_SURROGATE(uv, flags);
195             }
196         }
197 #endif
198         return d;
199     }
200
201     /* Not 3-byte; that means the code point is at least 0x1_0000 on ASCII
202      * platforms, and 0x4000 on EBCDIC.  There are problematic cases that can
203      * happen starting with 4-byte characters on ASCII platforms.  We unify the
204      * code for these with EBCDIC, even though some of them require 5-bytes on
205      * those, because khw believes the code saving is worth the very slight
206      * performance hit on these high EBCDIC code points. */
207
208     if (UNLIKELY(UNICODE_IS_SUPER(uv))) {
209         if (   UNLIKELY(uv > MAX_NON_DEPRECATED_CP)
210             && ckWARN_d(WARN_DEPRECATED))
211         {
212             Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
213                         cp_above_legal_max, uv, MAX_NON_DEPRECATED_CP);
214         }
215         if (       (flags & UNICODE_WARN_SUPER)
216             || (   UNICODE_IS_ABOVE_31_BIT(uv)
217                 && (flags & UNICODE_WARN_ABOVE_31_BIT)))
218         {
219             Perl_ck_warner_d(aTHX_ packWARN(WARN_NON_UNICODE),
220
221               /* Choose the more dire applicable warning */
222               (UNICODE_IS_ABOVE_31_BIT(uv))
223               ? above_31_bit_cp_format
224               : super_cp_format,
225              uv);
226         }
227         if (       (flags & UNICODE_DISALLOW_SUPER)
228             || (   UNICODE_IS_ABOVE_31_BIT(uv)
229                 && (flags & UNICODE_DISALLOW_ABOVE_31_BIT)))
230         {
231             return NULL;
232         }
233     }
234     else if (UNLIKELY(UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv))) {
235         HANDLE_UNICODE_NONCHAR(uv, flags);
236     }
237
238     /* Test for and handle 4-byte result.   In the test immediately below, the
239      * 8 is for start bytes F0-F7 (which are all the possible ones for 4 byte
240      * characters).  The 3 is for 3 continuation bytes; these each contribute
241      * SHIFT bits.  This yields 0x4_0000 on EBCDIC platforms, 0x20_0000 on
242      * ASCII, so 4 bytes covers the range 0x4000-0x3_FFFF on EBCDIC;
243      * 0x1_0000-0x1F_FFFF on ASCII */
244     if (uv < (8 * (1U << (3 * SHIFT)))) {
245         *d++ = I8_TO_NATIVE_UTF8(( uv >> ((4 - 1) * SHIFT)) | UTF_START_MARK(4));
246         *d++ = I8_TO_NATIVE_UTF8(((uv >> ((3 - 1) * SHIFT)) & MASK) |   MARK);
247         *d++ = I8_TO_NATIVE_UTF8(((uv >> ((2 - 1) * SHIFT)) & MASK) |   MARK);
248         *d++ = I8_TO_NATIVE_UTF8(( uv  /* (1 - 1) */        & MASK) |   MARK);
249
250 #ifdef EBCDIC   /* These were handled on ASCII platforms in the code for 3-byte
251                    characters.  The end-plane non-characters for EBCDIC were
252                    handled just above */
253         if (UNLIKELY(UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv))) {
254             HANDLE_UNICODE_NONCHAR(uv, flags);
255         }
256         else if (UNLIKELY(UNICODE_IS_SURROGATE(uv))) {
257             HANDLE_UNICODE_SURROGATE(uv, flags);
258         }
259 #endif
260
261         return d;
262     }
263
264     /* Not 4-byte; that means the code point is at least 0x20_0000 on ASCII
265      * platforms, and 0x4000 on EBCDIC.  At this point we switch to a loop
266      * format.  The unrolled version above turns out to not save all that much
267      * time, and at these high code points (well above the legal Unicode range
268      * on ASCII platforms, and well above anything in common use in EBCDIC),
269      * khw believes that less code outweighs slight performance gains. */
270
271     {
272         STRLEN len  = OFFUNISKIP(uv);
273         U8 *p = d+len-1;
274         while (p > d) {
275             *p-- = I8_TO_NATIVE_UTF8((uv & UTF_CONTINUATION_MASK) | UTF_CONTINUATION_MARK);
276             uv >>= UTF_ACCUMULATION_SHIFT;
277         }
278         *p = I8_TO_NATIVE_UTF8((uv & UTF_START_MASK(len)) | UTF_START_MARK(len));
279         return d+len;
280     }
281 }
282
283 /*
284 =for apidoc uvchr_to_utf8
285
286 Adds the UTF-8 representation of the native code point C<uv> to the end
287 of the string C<d>; C<d> should have at least C<UVCHR_SKIP(uv)+1> (up to
288 C<UTF8_MAXBYTES+1>) free bytes available.  The return value is the pointer to
289 the byte after the end of the new character.  In other words,
290
291     d = uvchr_to_utf8(d, uv);
292
293 is the recommended wide native character-aware way of saying
294
295     *(d++) = uv;
296
297 This function accepts any UV as input, but very high code points (above
298 C<IV_MAX> on the platform)  will raise a deprecation warning.  This is
299 typically 0x7FFF_FFFF in a 32-bit word.
300
301 It is possible to forbid or warn on non-Unicode code points, or those that may
302 be problematic by using L</uvchr_to_utf8_flags>.
303
304 =cut
305 */
306
307 /* This is also a macro */
308 PERL_CALLCONV U8*       Perl_uvchr_to_utf8(pTHX_ U8 *d, UV uv);
309
310 U8 *
311 Perl_uvchr_to_utf8(pTHX_ U8 *d, UV uv)
312 {
313     return uvchr_to_utf8(d, uv);
314 }
315
316 /*
317 =for apidoc uvchr_to_utf8_flags
318
319 Adds the UTF-8 representation of the native code point C<uv> to the end
320 of the string C<d>; C<d> should have at least C<UVCHR_SKIP(uv)+1> (up to
321 C<UTF8_MAXBYTES+1>) free bytes available.  The return value is the pointer to
322 the byte after the end of the new character.  In other words,
323
324     d = uvchr_to_utf8_flags(d, uv, flags);
325
326 or, in most cases,
327
328     d = uvchr_to_utf8_flags(d, uv, 0);
329
330 This is the Unicode-aware way of saying
331
332     *(d++) = uv;
333
334 If C<flags> is 0, this function accepts any UV as input, but very high code
335 points (above C<IV_MAX> for the platform)  will raise a deprecation warning.
336 This is typically 0x7FFF_FFFF in a 32-bit word.
337
338 Specifying C<flags> can further restrict what is allowed and not warned on, as
339 follows:
340
341 If C<uv> is a Unicode surrogate code point and C<UNICODE_WARN_SURROGATE> is set,
342 the function will raise a warning, provided UTF8 warnings are enabled.  If
343 instead C<UNICODE_DISALLOW_SURROGATE> is set, the function will fail and return
344 NULL.  If both flags are set, the function will both warn and return NULL.
345
346 Similarly, the C<UNICODE_WARN_NONCHAR> and C<UNICODE_DISALLOW_NONCHAR> flags
347 affect how the function handles a Unicode non-character.
348
349 And likewise, the C<UNICODE_WARN_SUPER> and C<UNICODE_DISALLOW_SUPER> flags
350 affect the handling of code points that are above the Unicode maximum of
351 0x10FFFF.  Languages other than Perl may not be able to accept files that
352 contain these.
353
354 The flag C<UNICODE_WARN_ILLEGAL_INTERCHANGE> selects all three of
355 the above WARN flags; and C<UNICODE_DISALLOW_ILLEGAL_INTERCHANGE> selects all
356 three DISALLOW flags.  C<UNICODE_DISALLOW_ILLEGAL_INTERCHANGE> restricts the
357 allowed inputs to the strict UTF-8 traditionally defined by Unicode.
358 Similarly, C<UNICODE_WARN_ILLEGAL_C9_INTERCHANGE> and
359 C<UNICODE_DISALLOW_ILLEGAL_C9_INTERCHANGE> are shortcuts to select the
360 above-Unicode and surrogate flags, but not the non-character ones, as
361 defined in
362 L<Unicode Corrigendum #9|http://www.unicode.org/versions/corrigendum9.html>.
363 See L<perlunicode/Noncharacter code points>.
364
365 Code points above 0x7FFF_FFFF (2**31 - 1) were never specified in any standard,
366 so using them is more problematic than other above-Unicode code points.  Perl
367 invented an extension to UTF-8 to represent the ones above 2**36-1, so it is
368 likely that non-Perl languages will not be able to read files that contain
369 these that written by the perl interpreter; nor would Perl understand files
370 written by something that uses a different extension.  For these reasons, there
371 is a separate set of flags that can warn and/or disallow these extremely high
372 code points, even if other above-Unicode ones are accepted.  These are the
373 C<UNICODE_WARN_ABOVE_31_BIT> and C<UNICODE_DISALLOW_ABOVE_31_BIT> flags.  These
374 are entirely independent from the deprecation warning for code points above
375 C<IV_MAX>.  On 32-bit machines, it will eventually be forbidden to have any
376 code point that needs more than 31 bits to represent.  When that happens,
377 effectively the C<UNICODE_DISALLOW_ABOVE_31_BIT> flag will always be set on
378 32-bit machines.  (Of course C<UNICODE_DISALLOW_SUPER> will treat all
379 above-Unicode code points, including these, as malformations; and
380 C<UNICODE_WARN_SUPER> warns on these.)
381
382 On EBCDIC platforms starting in Perl v5.24, the Perl extension for representing
383 extremely high code points kicks in at 0x3FFF_FFFF (2**30 -1), which is lower
384 than on ASCII.  Prior to that, code points 2**31 and higher were simply
385 unrepresentable, and a different, incompatible method was used to represent
386 code points between 2**30 and 2**31 - 1.  The flags C<UNICODE_WARN_ABOVE_31_BIT>
387 and C<UNICODE_DISALLOW_ABOVE_31_BIT> have the same function as on ASCII
388 platforms, warning and disallowing 2**31 and higher.
389
390 =cut
391 */
392
393 /* This is also a macro */
394 PERL_CALLCONV U8*       Perl_uvchr_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags);
395
396 U8 *
397 Perl_uvchr_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
398 {
399     return uvchr_to_utf8_flags(d, uv, flags);
400 }
401
402 PERL_STATIC_INLINE bool
403 S_is_utf8_cp_above_31_bits(const U8 * const s, const U8 * const e)
404 {
405     /* Returns TRUE if the first code point represented by the Perl-extended-
406      * UTF-8-encoded string starting at 's', and looking no further than 'e -
407      * 1' doesn't fit into 31 bytes.  That is, that if it is >= 2**31.
408      *
409      * The function handles the case where the input bytes do not include all
410      * the ones necessary to represent a full character.  That is, they may be
411      * the intial bytes of the representation of a code point, but possibly
412      * the final ones necessary for the complete representation may be beyond
413      * 'e - 1'.
414      *
415      * The function assumes that the sequence is well-formed UTF-8 as far as it
416      * goes, and is for a UTF-8 variant code point.  If the sequence is
417      * incomplete, the function returns FALSE if there is any well-formed
418      * UTF-8 byte sequence that can complete it in such a way that a code point
419      * < 2**31 is produced; otherwise it returns TRUE.
420      *
421      * Getting this exactly right is slightly tricky, and has to be done in
422      * several places in this file, so is centralized here.  It is based on the
423      * following table:
424      *
425      * U+7FFFFFFF (2 ** 31 - 1)
426      *      ASCII: \xFD\xBF\xBF\xBF\xBF\xBF
427      *   IBM-1047: \xFE\x41\x41\x41\x41\x41\x41\x42\x73\x73\x73\x73\x73\x73
428      *    IBM-037: \xFE\x41\x41\x41\x41\x41\x41\x42\x72\x72\x72\x72\x72\x72
429      *   POSIX-BC: \xFE\x41\x41\x41\x41\x41\x41\x42\x75\x75\x75\x75\x75\x75
430      *         I8: \xFF\xA0\xA0\xA0\xA0\xA0\xA0\xA1\xBF\xBF\xBF\xBF\xBF\xBF
431      * U+80000000 (2 ** 31):
432      *      ASCII: \xFE\x82\x80\x80\x80\x80\x80
433      *              [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 10  11  12  13
434      *   IBM-1047: \xFE\x41\x41\x41\x41\x41\x41\x43\x41\x41\x41\x41\x41\x41
435      *    IBM-037: \xFE\x41\x41\x41\x41\x41\x41\x43\x41\x41\x41\x41\x41\x41
436      *   POSIX-BC: \xFE\x41\x41\x41\x41\x41\x41\x43\x41\x41\x41\x41\x41\x41
437      *         I8: \xFF\xA0\xA0\xA0\xA0\xA0\xA0\xA2\xA0\xA0\xA0\xA0\xA0\xA0
438      */
439
440 #ifdef EBCDIC
441
442     /* [0] is start byte  [1] [2] [3] [4] [5] [6] [7] */
443     const U8 prefix[] = "\x41\x41\x41\x41\x41\x41\x42";
444     const STRLEN prefix_len = sizeof(prefix) - 1;
445     const STRLEN len = e - s;
446     const STRLEN cmp_len = MIN(prefix_len, len - 1);
447
448 #else
449
450     PERL_UNUSED_ARG(e);
451
452 #endif
453
454     PERL_ARGS_ASSERT_IS_UTF8_CP_ABOVE_31_BITS;
455
456     assert(! UTF8_IS_INVARIANT(*s));
457
458 #ifndef EBCDIC
459
460     /* Technically, a start byte of FE can be for a code point that fits into
461      * 31 bytes, but not for well-formed UTF-8: doing that requires an overlong
462      * malformation. */
463     return (*s >= 0xFE);
464
465 #else
466
467     /* On the EBCDIC code pages we handle, only the native start byte 0xFE can
468      * mean a 32-bit or larger code point (0xFF is an invariant).  For 0xFE, we
469      * need at least 2 bytes, and maybe up through 8 bytes, to be sure that the
470      * value is above 31 bits. */
471     if (*s != 0xFE || len == 1) {
472         return FALSE;
473     }
474
475     /* Note that in UTF-EBCDIC, the two lowest possible continuation bytes are
476      * \x41 and \x42. */
477     return cBOOL(memGT(s + 1, prefix, cmp_len));
478
479 #endif
480
481 }
482
483 /* Anything larger than this will overflow the word if it were converted into a UV */
484 #if defined(UV_IS_QUAD)
485 #  ifdef EBCDIC     /* Actually is I8 */
486 #   define HIGHEST_REPRESENTABLE_UTF8                                       \
487                 "\xFF\xAF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF"
488 #  else
489 #   define HIGHEST_REPRESENTABLE_UTF8                                       \
490                 "\xFF\x80\x8F\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF"
491 #  endif
492 #else   /* 32-bit */
493 #  ifdef EBCDIC
494 #   define HIGHEST_REPRESENTABLE_UTF8                                       \
495                 "\xFF\xA0\xA0\xA0\xA0\xA0\xA0\xA3\xBF\xBF\xBF\xBF\xBF\xBF"
496 #  else
497 #   define HIGHEST_REPRESENTABLE_UTF8  "\xFE\x83\xBF\xBF\xBF\xBF\xBF"
498 #  endif
499 #endif
500
501 PERL_STATIC_INLINE bool
502 S_does_utf8_overflow(const U8 * const s, const U8 * e)
503 {
504     const U8 *x;
505     const U8 * y = (const U8 *) HIGHEST_REPRESENTABLE_UTF8;
506
507 #if ! defined(UV_IS_QUAD) && ! defined(EBCDIC)
508
509     const STRLEN len = e - s;
510
511 #endif
512
513     /* Returns a boolean as to if this UTF-8 string would overflow a UV on this
514      * platform, that is if it represents a code point larger than the highest
515      * representable code point.  (For ASCII platforms, we could use memcmp()
516      * because we don't have to convert each byte to I8, but it's very rare
517      * input indeed that would approach overflow, so the loop below will likely
518      * only get executed once.
519      *
520      * 'e' must not be beyond a full character.  If it is less than a full
521      * character, the function returns FALSE if there is any input beyond 'e'
522      * that could result in a non-overflowing code point */
523
524     PERL_ARGS_ASSERT_DOES_UTF8_OVERFLOW;
525     assert(s <= e && s + UTF8SKIP(s) >= e);
526
527 #if ! defined(UV_IS_QUAD) && ! defined(EBCDIC)
528
529     /* On 32 bit ASCII machines, many overlongs that start with FF don't
530      * overflow */
531
532     if (isFF_OVERLONG(s, len)) {
533         const U8 max_32_bit_overlong[] = "\xFF\x80\x80\x80\x80\x80\x80\x84";
534         return memGE(s, max_32_bit_overlong,
535                                 MIN(len, sizeof(max_32_bit_overlong) - 1));
536     }
537
538 #endif
539
540     for (x = s; x < e; x++, y++) {
541
542             /* If this byte is larger than the corresponding highest UTF-8
543                 * byte, it overflows */
544             if (UNLIKELY(NATIVE_UTF8_TO_I8(*x) > *y)) {
545                 return TRUE;
546             }
547
548             /* If not the same as this byte, it must be smaller, doesn't
549                 * overflow */
550             if (LIKELY(NATIVE_UTF8_TO_I8(*x) != *y)) {
551                 return FALSE;
552             }
553         }
554
555     /* Got to the end and all bytes are the same.  If the input is a whole
556      * character, it doesn't overflow.  And if it is a partial character,
557      * there's not enough information to tell, so assume doesn't overflow */
558     return FALSE;
559 }
560
561 PERL_STATIC_INLINE bool
562 S_is_utf8_overlong_given_start_byte_ok(const U8 * const s, const STRLEN len)
563 {
564     /* Overlongs can occur whenever the number of continuation bytes
565      * changes.  That means whenever the number of leading 1 bits in a start
566      * byte increases from the next lower start byte.  That happens for start
567      * bytes C0, E0, F0, F8, FC, FE, and FF.  On modern perls, the following
568      * illegal start bytes have already been excluded, so don't need to be
569      * tested here;
570      * ASCII platforms: C0, C1
571      * EBCDIC platforms C0, C1, C2, C3, C4, E0
572      *
573      * At least a second byte is required to determine if other sequences will
574      * be an overlong. */
575
576     const U8 s0 = NATIVE_UTF8_TO_I8(s[0]);
577     const U8 s1 = NATIVE_UTF8_TO_I8(s[1]);
578
579     PERL_ARGS_ASSERT_IS_UTF8_OVERLONG_GIVEN_START_BYTE_OK;
580     assert(len > 1 && UTF8_IS_START(*s));
581
582     /* Each platform has overlongs after the start bytes given above (expressed
583      * in I8 for EBCDIC).  What constitutes an overlong varies by platform, but
584      * the logic is the same, except the E0 overlong has already been excluded
585      * on EBCDIC platforms.   The  values below were found by manually
586      * inspecting the UTF-8 patterns.  See the tables in utf8.h and
587      * utfebcdic.h. */
588
589 #       ifdef EBCDIC
590 #           define F0_ABOVE_OVERLONG 0xB0
591 #           define F8_ABOVE_OVERLONG 0xA8
592 #           define FC_ABOVE_OVERLONG 0xA4
593 #           define FE_ABOVE_OVERLONG 0xA2
594 #           define FF_OVERLONG_PREFIX "\xfe\x41\x41\x41\x41\x41\x41\x41"
595                                     /* I8(0xfe) is FF */
596 #       else
597
598     if (s0 == 0xE0 && UNLIKELY(s1 < 0xA0)) {
599         return TRUE;
600     }
601
602 #           define F0_ABOVE_OVERLONG 0x90
603 #           define F8_ABOVE_OVERLONG 0x88
604 #           define FC_ABOVE_OVERLONG 0x84
605 #           define FE_ABOVE_OVERLONG 0x82
606 #           define FF_OVERLONG_PREFIX "\xff\x80\x80\x80\x80\x80\x80"
607 #       endif
608
609
610     if (   (s0 == 0xF0 && UNLIKELY(s1 < F0_ABOVE_OVERLONG))
611         || (s0 == 0xF8 && UNLIKELY(s1 < F8_ABOVE_OVERLONG))
612         || (s0 == 0xFC && UNLIKELY(s1 < FC_ABOVE_OVERLONG))
613         || (s0 == 0xFE && UNLIKELY(s1 < FE_ABOVE_OVERLONG)))
614     {
615         return TRUE;
616     }
617
618     /* Check for the FF overlong */
619     return isFF_OVERLONG(s, len);
620 }
621
622 PERL_STATIC_INLINE bool
623 S_isFF_OVERLONG(const U8 * const s, const STRLEN len)
624 {
625     PERL_ARGS_ASSERT_ISFF_OVERLONG;
626
627     /* Check for the FF overlong.  This happens only if all these bytes match;
628      * what comes after them doesn't matter.  See tables in utf8.h,
629      * utfebcdic.h. */
630
631     return    len >= sizeof(FF_OVERLONG_PREFIX) - 1
632            && UNLIKELY(memEQ(s, FF_OVERLONG_PREFIX,
633                                             sizeof(FF_OVERLONG_PREFIX) - 1));
634 }
635
636 #undef F0_ABOVE_OVERLONG
637 #undef F8_ABOVE_OVERLONG
638 #undef FC_ABOVE_OVERLONG
639 #undef FE_ABOVE_OVERLONG
640 #undef FF_OVERLONG_PREFIX
641
642 STRLEN
643 Perl__is_utf8_char_helper(const U8 * const s, const U8 * e, const U32 flags)
644 {
645     STRLEN len;
646     const U8 *x;
647
648     /* A helper function that should not be called directly.
649      *
650      * This function returns non-zero if the string beginning at 's' and
651      * looking no further than 'e - 1' is well-formed Perl-extended-UTF-8 for a
652      * code point; otherwise it returns 0.  The examination stops after the
653      * first code point in 's' is validated, not looking at the rest of the
654      * input.  If 'e' is such that there are not enough bytes to represent a
655      * complete code point, this function will return non-zero anyway, if the
656      * bytes it does have are well-formed UTF-8 as far as they go, and aren't
657      * excluded by 'flags'.
658      *
659      * A non-zero return gives the number of bytes required to represent the
660      * code point.  Be aware that if the input is for a partial character, the
661      * return will be larger than 'e - s'.
662      *
663      * This function assumes that the code point represented is UTF-8 variant.
664      * The caller should have excluded the possibility of it being invariant
665      * before calling this function.
666      *
667      * 'flags' can be 0, or any combination of the UTF8_DISALLOW_foo flags
668      * accepted by L</utf8n_to_uvchr>.  If non-zero, this function will return
669      * 0 if the code point represented is well-formed Perl-extended-UTF-8, but
670      * disallowed by the flags.  If the input is only for a partial character,
671      * the function will return non-zero if there is any sequence of
672      * well-formed UTF-8 that, when appended to the input sequence, could
673      * result in an allowed code point; otherwise it returns 0.  Non characters
674      * cannot be determined based on partial character input.  But many  of the
675      * other excluded types can be determined with just the first one or two
676      * bytes.
677      *
678      */
679
680     PERL_ARGS_ASSERT__IS_UTF8_CHAR_HELPER;
681
682     assert(0 == (flags & ~(UTF8_DISALLOW_ILLEGAL_INTERCHANGE
683                           |UTF8_DISALLOW_ABOVE_31_BIT)));
684     assert(! UTF8_IS_INVARIANT(*s));
685
686     /* A variant char must begin with a start byte */
687     if (UNLIKELY(! UTF8_IS_START(*s))) {
688         return 0;
689     }
690
691     /* Examine a maximum of a single whole code point */
692     if (e - s > UTF8SKIP(s)) {
693         e = s + UTF8SKIP(s);
694     }
695
696     len = e - s;
697
698     if (flags && isUTF8_POSSIBLY_PROBLEMATIC(*s)) {
699         const U8 s0 = NATIVE_UTF8_TO_I8(s[0]);
700
701         /* Here, we are disallowing some set of largish code points, and the
702          * first byte indicates the sequence is for a code point that could be
703          * in the excluded set.  We generally don't have to look beyond this or
704          * the second byte to see if the sequence is actually for one of the
705          * excluded classes.  The code below is derived from this table:
706          *
707          *              UTF-8            UTF-EBCDIC I8
708          *   U+D800: \xED\xA0\x80      \xF1\xB6\xA0\xA0      First surrogate
709          *   U+DFFF: \xED\xBF\xBF      \xF1\xB7\xBF\xBF      Final surrogate
710          * U+110000: \xF4\x90\x80\x80  \xF9\xA2\xA0\xA0\xA0  First above Unicode
711          *
712          * Keep in mind that legal continuation bytes range between \x80..\xBF
713          * for UTF-8, and \xA0..\xBF for I8.  Anything above those aren't
714          * continuation bytes.  Hence, we don't have to test the upper edge
715          * because if any of those is encountered, the sequence is malformed,
716          * and would fail elsewhere in this function.
717          *
718          * The code here likewise assumes that there aren't other
719          * malformations; again the function should fail elsewhere because of
720          * these.  For example, an overlong beginning with FC doesn't actually
721          * have to be a super; it could actually represent a small code point,
722          * even U+0000.  But, since overlongs (and other malformations) are
723          * illegal, the function should return FALSE in either case.
724          */
725
726 #ifdef EBCDIC   /* On EBCDIC, these are actually I8 bytes */
727 #  define FIRST_START_BYTE_THAT_IS_DEFINITELY_SUPER  0xFA
728 #  define IS_UTF8_2_BYTE_SUPER(s0, s1)           ((s0) == 0xF9 && (s1) >= 0xA2)
729
730 #  define IS_UTF8_2_BYTE_SURROGATE(s0, s1)       ((s0) == 0xF1              \
731                                                        /* B6 and B7 */      \
732                                               && ((s1) & 0xFE ) == 0xB6)
733 #else
734 #  define FIRST_START_BYTE_THAT_IS_DEFINITELY_SUPER  0xF5
735 #  define IS_UTF8_2_BYTE_SUPER(s0, s1)           ((s0) == 0xF4 && (s1) >= 0x90)
736 #  define IS_UTF8_2_BYTE_SURROGATE(s0, s1)       ((s0) == 0xED && (s1) >= 0xA0)
737 #endif
738
739         if (  (flags & UTF8_DISALLOW_SUPER)
740             && UNLIKELY(s0 >= FIRST_START_BYTE_THAT_IS_DEFINITELY_SUPER))
741         {
742             return 0;           /* Above Unicode */
743         }
744
745         if (   (flags & UTF8_DISALLOW_ABOVE_31_BIT)
746             &&  UNLIKELY(is_utf8_cp_above_31_bits(s, e)))
747         {
748             return 0;           /* Above 31 bits */
749         }
750
751         if (len > 1) {
752             const U8 s1 = NATIVE_UTF8_TO_I8(s[1]);
753
754             if (   (flags & UTF8_DISALLOW_SUPER)
755                 &&  UNLIKELY(IS_UTF8_2_BYTE_SUPER(s0, s1)))
756             {
757                 return 0;       /* Above Unicode */
758             }
759
760             if (   (flags & UTF8_DISALLOW_SURROGATE)
761                 &&  UNLIKELY(IS_UTF8_2_BYTE_SURROGATE(s0, s1)))
762             {
763                 return 0;       /* Surrogate */
764             }
765
766             if (  (flags & UTF8_DISALLOW_NONCHAR)
767                 && UNLIKELY(UTF8_IS_NONCHAR(s, e)))
768             {
769                 return 0;       /* Noncharacter code point */
770             }
771         }
772     }
773
774     /* Make sure that all that follows are continuation bytes */
775     for (x = s + 1; x < e; x++) {
776         if (UNLIKELY(! UTF8_IS_CONTINUATION(*x))) {
777             return 0;
778         }
779     }
780
781     /* Here is syntactically valid.  Next, make sure this isn't the start of an
782      * overlong. */
783     if (len > 1 && is_utf8_overlong_given_start_byte_ok(s, len)) {
784         return 0;
785     }
786
787     /* And finally, that the code point represented fits in a word on this
788      * platform */
789     if (does_utf8_overflow(s, e)) {
790         return 0;
791     }
792
793     return UTF8SKIP(s);
794 }
795
796 char *
797 Perl__byte_dump_string(pTHX_ const U8 * s, const STRLEN len, const bool format)
798 {
799     /* Returns a mortalized C string that is a displayable copy of the 'len'
800      * bytes starting at 's'.  'format' gives how to display each byte.
801      * Currently, there are only two formats, so it is currently a bool:
802      *      0   \xab
803      *      1    ab         (that is a space between two hex digit bytes)
804      */
805
806     const STRLEN output_len = 4 * len + 1;  /* 4 bytes per each input, plus a
807                                                trailing NUL */
808     const U8 * const e = s + len;
809     char * output;
810     char * d;
811
812     PERL_ARGS_ASSERT__BYTE_DUMP_STRING;
813
814     Newx(output, output_len, char);
815     SAVEFREEPV(output);
816
817     d = output;
818     for (; s < e; s++) {
819         const unsigned high_nibble = (*s & 0xF0) >> 4;
820         const unsigned low_nibble =  (*s & 0x0F);
821
822         if (format) {
823             *d++ = ' ';
824         }
825         else {
826             *d++ = '\\';
827             *d++ = 'x';
828         }
829
830         if (high_nibble < 10) {
831             *d++ = high_nibble + '0';
832         }
833         else {
834             *d++ = high_nibble - 10 + 'a';
835         }
836
837         if (low_nibble < 10) {
838             *d++ = low_nibble + '0';
839         }
840         else {
841             *d++ = low_nibble - 10 + 'a';
842         }
843     }
844
845     *d = '\0';
846     return output;
847 }
848
849 PERL_STATIC_INLINE char *
850 S_unexpected_non_continuation_text(pTHX_ const U8 * const s,
851
852                                          /* How many bytes to print */
853                                          STRLEN print_len,
854
855                                          /* Which one is the non-continuation */
856                                          const STRLEN non_cont_byte_pos,
857
858                                          /* How many bytes should there be? */
859                                          const STRLEN expect_len)
860 {
861     /* Return the malformation warning text for an unexpected continuation
862      * byte. */
863
864     const char * const where = (non_cont_byte_pos == 1)
865                                ? "immediately"
866                                : Perl_form(aTHX_ "%d bytes",
867                                                  (int) non_cont_byte_pos);
868
869     PERL_ARGS_ASSERT_UNEXPECTED_NON_CONTINUATION_TEXT;
870
871     /* We don't need to pass this parameter, but since it has already been
872      * calculated, it's likely faster to pass it; verify under DEBUGGING */
873     assert(expect_len == UTF8SKIP(s));
874
875     return Perl_form(aTHX_ "%s: %s (unexpected non-continuation byte 0x%02x,"
876                            " %s after start byte 0x%02x; need %d bytes, got %d)",
877                            malformed_text,
878                            _byte_dump_string(s, print_len, 0),
879                            *(s + non_cont_byte_pos),
880                            where,
881                            *s,
882                            (int) expect_len,
883                            (int) non_cont_byte_pos);
884 }
885
886 /*
887
888 =for apidoc utf8n_to_uvchr
889
890 THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
891 Most code should use L</utf8_to_uvchr_buf>() rather than call this directly.
892
893 Bottom level UTF-8 decode routine.
894 Returns the native code point value of the first character in the string C<s>,
895 which is assumed to be in UTF-8 (or UTF-EBCDIC) encoding, and no longer than
896 C<curlen> bytes; C<*retlen> (if C<retlen> isn't NULL) will be set to
897 the length, in bytes, of that character.
898
899 The value of C<flags> determines the behavior when C<s> does not point to a
900 well-formed UTF-8 character.  If C<flags> is 0, encountering a malformation
901 causes zero to be returned and C<*retlen> is set so that (S<C<s> + C<*retlen>>)
902 is the next possible position in C<s> that could begin a non-malformed
903 character.  Also, if UTF-8 warnings haven't been lexically disabled, a warning
904 is raised.  Some UTF-8 input sequences may contain multiple malformations.
905 This function tries to find every possible one in each call, so multiple
906 warnings can be raised for the same sequence.
907
908 Various ALLOW flags can be set in C<flags> to allow (and not warn on)
909 individual types of malformations, such as the sequence being overlong (that
910 is, when there is a shorter sequence that can express the same code point;
911 overlong sequences are expressly forbidden in the UTF-8 standard due to
912 potential security issues).  Another malformation example is the first byte of
913 a character not being a legal first byte.  See F<utf8.h> for the list of such
914 flags.  Even if allowed, this function generally returns the Unicode
915 REPLACEMENT CHARACTER when it encounters a malformation.  There are flags in
916 F<utf8.h> to override this behavior for the overlong malformations, but don't
917 do that except for very specialized purposes.
918
919 The C<UTF8_CHECK_ONLY> flag overrides the behavior when a non-allowed (by other
920 flags) malformation is found.  If this flag is set, the routine assumes that
921 the caller will raise a warning, and this function will silently just set
922 C<retlen> to C<-1> (cast to C<STRLEN>) and return zero.
923
924 Note that this API requires disambiguation between successful decoding a C<NUL>
925 character, and an error return (unless the C<UTF8_CHECK_ONLY> flag is set), as
926 in both cases, 0 is returned, and, depending on the malformation, C<retlen> may
927 be set to 1.  To disambiguate, upon a zero return, see if the first byte of
928 C<s> is 0 as well.  If so, the input was a C<NUL>; if not, the input had an
929 error.  Or you can use C<L</utf8n_to_uvchr_error>>.
930
931 Certain code points are considered problematic.  These are Unicode surrogates,
932 Unicode non-characters, and code points above the Unicode maximum of 0x10FFFF.
933 By default these are considered regular code points, but certain situations
934 warrant special handling for them, which can be specified using the C<flags>
935 parameter.  If C<flags> contains C<UTF8_DISALLOW_ILLEGAL_INTERCHANGE>, all
936 three classes are treated as malformations and handled as such.  The flags
937 C<UTF8_DISALLOW_SURROGATE>, C<UTF8_DISALLOW_NONCHAR>, and
938 C<UTF8_DISALLOW_SUPER> (meaning above the legal Unicode maximum) can be set to
939 disallow these categories individually.  C<UTF8_DISALLOW_ILLEGAL_INTERCHANGE>
940 restricts the allowed inputs to the strict UTF-8 traditionally defined by
941 Unicode.  Use C<UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE> to use the strictness
942 definition given by
943 L<Unicode Corrigendum #9|http://www.unicode.org/versions/corrigendum9.html>.
944 The difference between traditional strictness and C9 strictness is that the
945 latter does not forbid non-character code points.  (They are still discouraged,
946 however.)  For more discussion see L<perlunicode/Noncharacter code points>.
947
948 The flags C<UTF8_WARN_ILLEGAL_INTERCHANGE>,
949 C<UTF8_WARN_ILLEGAL_C9_INTERCHANGE>, C<UTF8_WARN_SURROGATE>,
950 C<UTF8_WARN_NONCHAR>, and C<UTF8_WARN_SUPER> will cause warning messages to be
951 raised for their respective categories, but otherwise the code points are
952 considered valid (not malformations).  To get a category to both be treated as
953 a malformation and raise a warning, specify both the WARN and DISALLOW flags.
954 (But note that warnings are not raised if lexically disabled nor if
955 C<UTF8_CHECK_ONLY> is also specified.)
956
957 It is now deprecated to have very high code points (above C<IV_MAX> on the
958 platforms) and this function will raise a deprecation warning for these (unless
959 such warnings are turned off).  This value is typically 0x7FFF_FFFF (2**31 -1)
960 in a 32-bit word.
961
962 Code points above 0x7FFF_FFFF (2**31 - 1) were never specified in any standard,
963 so using them is more problematic than other above-Unicode code points.  Perl
964 invented an extension to UTF-8 to represent the ones above 2**36-1, so it is
965 likely that non-Perl languages will not be able to read files that contain
966 these; nor would Perl understand files
967 written by something that uses a different extension.  For these reasons, there
968 is a separate set of flags that can warn and/or disallow these extremely high
969 code points, even if other above-Unicode ones are accepted.  These are the
970 C<UTF8_WARN_ABOVE_31_BIT> and C<UTF8_DISALLOW_ABOVE_31_BIT> flags.  These
971 are entirely independent from the deprecation warning for code points above
972 C<IV_MAX>.  On 32-bit machines, it will eventually be forbidden to have any
973 code point that needs more than 31 bits to represent.  When that happens,
974 effectively the C<UTF8_DISALLOW_ABOVE_31_BIT> flag will always be set on
975 32-bit machines.  (Of course C<UTF8_DISALLOW_SUPER> will treat all
976 above-Unicode code points, including these, as malformations; and
977 C<UTF8_WARN_SUPER> warns on these.)
978
979 On EBCDIC platforms starting in Perl v5.24, the Perl extension for representing
980 extremely high code points kicks in at 0x3FFF_FFFF (2**30 -1), which is lower
981 than on ASCII.  Prior to that, code points 2**31 and higher were simply
982 unrepresentable, and a different, incompatible method was used to represent
983 code points between 2**30 and 2**31 - 1.  The flags C<UTF8_WARN_ABOVE_31_BIT>
984 and C<UTF8_DISALLOW_ABOVE_31_BIT> have the same function as on ASCII
985 platforms, warning and disallowing 2**31 and higher.
986
987 All other code points corresponding to Unicode characters, including private
988 use and those yet to be assigned, are never considered malformed and never
989 warn.
990
991 =cut
992
993 Also implemented as a macro in utf8.h
994 */
995
996 UV
997 Perl_utf8n_to_uvchr(pTHX_ const U8 *s,
998                           STRLEN curlen,
999                           STRLEN *retlen,
1000                           const U32 flags)
1001 {
1002     PERL_ARGS_ASSERT_UTF8N_TO_UVCHR;
1003
1004     return utf8n_to_uvchr_error(s, curlen, retlen, flags, NULL);
1005 }
1006
1007 /*
1008
1009 =for apidoc utf8n_to_uvchr_error
1010
1011 THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
1012 Most code should use L</utf8_to_uvchr_buf>() rather than call this directly.
1013
1014 This function is for code that needs to know what the precise malformation(s)
1015 are when an error is found.
1016
1017 It is like C<L</utf8n_to_uvchr>> but it takes an extra parameter placed after
1018 all the others, C<errors>.  If this parameter is 0, this function behaves
1019 identically to C<L</utf8n_to_uvchr>>.  Otherwise, C<errors> should be a pointer
1020 to a C<U32> variable, which this function sets to indicate any errors found.
1021 Upon return, if C<*errors> is 0, there were no errors found.  Otherwise,
1022 C<*errors> is the bit-wise C<OR> of the bits described in the list below.  Some
1023 of these bits will be set if a malformation is found, even if the input
1024 C<flags> parameter indicates that the given malformation is allowed; those
1025 exceptions are noted:
1026
1027 =over 4
1028
1029 =item C<UTF8_GOT_ABOVE_31_BIT>
1030
1031 The code point represented by the input UTF-8 sequence occupies more than 31
1032 bits.
1033 This bit is set only if the input C<flags> parameter contains either the
1034 C<UTF8_DISALLOW_ABOVE_31_BIT> or the C<UTF8_WARN_ABOVE_31_BIT> flags.
1035
1036 =item C<UTF8_GOT_CONTINUATION>
1037
1038 The input sequence was malformed in that the first byte was a a UTF-8
1039 continuation byte.
1040
1041 =item C<UTF8_GOT_EMPTY>
1042
1043 The input C<curlen> parameter was 0.
1044
1045 =item C<UTF8_GOT_LONG>
1046
1047 The input sequence was malformed in that there is some other sequence that
1048 evaluates to the same code point, but that sequence is shorter than this one.
1049
1050 Until Unicode 3.1, it was legal for programs to accept this malformation, but
1051 it was discovered that this created security issues.
1052
1053 =item C<UTF8_GOT_NONCHAR>
1054
1055 The code point represented by the input UTF-8 sequence is for a Unicode
1056 non-character code point.
1057 This bit is set only if the input C<flags> parameter contains either the
1058 C<UTF8_DISALLOW_NONCHAR> or the C<UTF8_WARN_NONCHAR> flags.
1059
1060 =item C<UTF8_GOT_NON_CONTINUATION>
1061
1062 The input sequence was malformed in that a non-continuation type byte was found
1063 in a position where only a continuation type one should be.
1064
1065 =item C<UTF8_GOT_OVERFLOW>
1066
1067 The input sequence was malformed in that it is for a code point that is not
1068 representable in the number of bits available in a UV on the current platform.
1069
1070 =item C<UTF8_GOT_SHORT>
1071
1072 The input sequence was malformed in that C<curlen> is smaller than required for
1073 a complete sequence.  In other words, the input is for a partial character
1074 sequence.
1075
1076 =item C<UTF8_GOT_SUPER>
1077
1078 The input sequence was malformed in that it is for a non-Unicode code point;
1079 that is, one above the legal Unicode maximum.
1080 This bit is set only if the input C<flags> parameter contains either the
1081 C<UTF8_DISALLOW_SUPER> or the C<UTF8_WARN_SUPER> flags.
1082
1083 =item C<UTF8_GOT_SURROGATE>
1084
1085 The input sequence was malformed in that it is for a -Unicode UTF-16 surrogate
1086 code point.
1087 This bit is set only if the input C<flags> parameter contains either the
1088 C<UTF8_DISALLOW_SURROGATE> or the C<UTF8_WARN_SURROGATE> flags.
1089
1090 =back
1091
1092 To do your own error handling, call this function with the C<UTF8_CHECK_ONLY>
1093 flag to suppress any warnings, and then examine the C<*errors> return.
1094
1095 =cut
1096 */
1097
1098 UV
1099 Perl_utf8n_to_uvchr_error(pTHX_ const U8 *s,
1100                                 STRLEN curlen,
1101                                 STRLEN *retlen,
1102                                 const U32 flags,
1103                                 U32 * errors)
1104 {
1105     const U8 * const s0 = s;
1106     U8 * send = NULL;           /* (initialized to silence compilers' wrong
1107                                    warning) */
1108     U32 possible_problems = 0;  /* A bit is set here for each potential problem
1109                                    found as we go along */
1110     UV uv = *s;
1111     STRLEN expectlen   = 0;     /* How long should this sequence be?
1112                                    (initialized to silence compilers' wrong
1113                                    warning) */
1114     STRLEN avail_len   = 0;     /* When input is too short, gives what that is */
1115     U32 discard_errors = 0;     /* Used to save branches when 'errors' is NULL;
1116                                    this gets set and discarded */
1117
1118     /* The below are used only if there is both an overlong malformation and a
1119      * too short one.  Otherwise the first two are set to 's0' and 'send', and
1120      * the third not used at all */
1121     U8 * adjusted_s0 = (U8 *) s0;
1122     U8 * adjusted_send = NULL;  /* (Initialized to silence compilers' wrong
1123                                    warning) */
1124     U8 temp_char_buf[UTF8_MAXBYTES + 1]; /* Used to avoid a Newx in this
1125                                             routine; see [perl #130921] */
1126     UV uv_so_far = 0;   /* (Initialized to silence compilers' wrong warning) */
1127
1128     PERL_ARGS_ASSERT_UTF8N_TO_UVCHR_ERROR;
1129
1130     if (errors) {
1131         *errors = 0;
1132     }
1133     else {
1134         errors = &discard_errors;
1135     }
1136
1137     /* The order of malformation tests here is important.  We should consume as
1138      * few bytes as possible in order to not skip any valid character.  This is
1139      * required by the Unicode Standard (section 3.9 of Unicode 6.0); see also
1140      * http://unicode.org/reports/tr36 for more discussion as to why.  For
1141      * example, once we've done a UTF8SKIP, we can tell the expected number of
1142      * bytes, and could fail right off the bat if the input parameters indicate
1143      * that there are too few available.  But it could be that just that first
1144      * byte is garbled, and the intended character occupies fewer bytes.  If we
1145      * blindly assumed that the first byte is correct, and skipped based on
1146      * that number, we could skip over a valid input character.  So instead, we
1147      * always examine the sequence byte-by-byte.
1148      *
1149      * We also should not consume too few bytes, otherwise someone could inject
1150      * things.  For example, an input could be deliberately designed to
1151      * overflow, and if this code bailed out immediately upon discovering that,
1152      * returning to the caller C<*retlen> pointing to the very next byte (one
1153      * which is actually part of of the overflowing sequence), that could look
1154      * legitimate to the caller, which could discard the initial partial
1155      * sequence and process the rest, inappropriately.
1156      *
1157      * Some possible input sequences are malformed in more than one way.  This
1158      * function goes to lengths to try to find all of them.  This is necessary
1159      * for correctness, as the inputs may allow one malformation but not
1160      * another, and if we abandon searching for others after finding the
1161      * allowed one, we could allow in something that shouldn't have been.
1162      */
1163
1164     if (UNLIKELY(curlen == 0)) {
1165         possible_problems |= UTF8_GOT_EMPTY;
1166         curlen = 0;
1167         uv = UNICODE_REPLACEMENT;
1168         goto ready_to_handle_errors;
1169     }
1170
1171     expectlen = UTF8SKIP(s);
1172
1173     /* A well-formed UTF-8 character, as the vast majority of calls to this
1174      * function will be for, has this expected length.  For efficiency, set
1175      * things up here to return it.  It will be overriden only in those rare
1176      * cases where a malformation is found */
1177     if (retlen) {
1178         *retlen = expectlen;
1179     }
1180
1181     /* An invariant is trivially well-formed */
1182     if (UTF8_IS_INVARIANT(uv)) {
1183         return uv;
1184     }
1185
1186     /* A continuation character can't start a valid sequence */
1187     if (UNLIKELY(UTF8_IS_CONTINUATION(uv))) {
1188         possible_problems |= UTF8_GOT_CONTINUATION;
1189         curlen = 1;
1190         uv = UNICODE_REPLACEMENT;
1191         goto ready_to_handle_errors;
1192     }
1193
1194     /* Here is not a continuation byte, nor an invariant.  The only thing left
1195      * is a start byte (possibly for an overlong).  (We can't use UTF8_IS_START
1196      * because it excludes start bytes like \xC0 that always lead to
1197      * overlongs.) */
1198
1199     /* Convert to I8 on EBCDIC (no-op on ASCII), then remove the leading bits
1200      * that indicate the number of bytes in the character's whole UTF-8
1201      * sequence, leaving just the bits that are part of the value.  */
1202     uv = NATIVE_UTF8_TO_I8(uv) & UTF_START_MASK(expectlen);
1203
1204     /* Setup the loop end point, making sure to not look past the end of the
1205      * input string, and flag it as too short if the size isn't big enough. */
1206     send = (U8*) s0;
1207     if (UNLIKELY(curlen < expectlen)) {
1208         possible_problems |= UTF8_GOT_SHORT;
1209         avail_len = curlen;
1210         send += curlen;
1211     }
1212     else {
1213         send += expectlen;
1214     }
1215     adjusted_send = send;
1216
1217     /* Now, loop through the remaining bytes in the character's sequence,
1218      * accumulating each into the working value as we go. */
1219     for (s = s0 + 1; s < send; s++) {
1220         if (LIKELY(UTF8_IS_CONTINUATION(*s))) {
1221             uv = UTF8_ACCUMULATE(uv, *s);
1222             continue;
1223         }
1224
1225         /* Here, found a non-continuation before processing all expected bytes.
1226          * This byte indicates the beginning of a new character, so quit, even
1227          * if allowing this malformation. */
1228         possible_problems |= UTF8_GOT_NON_CONTINUATION;
1229         break;
1230     } /* End of loop through the character's bytes */
1231
1232     /* Save how many bytes were actually in the character */
1233     curlen = s - s0;
1234
1235     /* Note that there are two types of too-short malformation.  One is when
1236      * there is actual wrong data before the normal termination of the
1237      * sequence.  The other is that the sequence wasn't complete before the end
1238      * of the data we are allowed to look at, based on the input 'curlen'.
1239      * This means that we were passed data for a partial character, but it is
1240      * valid as far as we saw.  The other is definitely invalid.  This
1241      * distinction could be important to a caller, so the two types are kept
1242      * separate.
1243      *
1244      * A convenience macro that matches either of the too-short conditions.  */
1245 #   define UTF8_GOT_TOO_SHORT (UTF8_GOT_SHORT|UTF8_GOT_NON_CONTINUATION)
1246
1247     if (UNLIKELY(possible_problems & UTF8_GOT_TOO_SHORT)) {
1248         uv_so_far = uv;
1249         uv = UNICODE_REPLACEMENT;
1250     }
1251
1252     /* Check for overflow. */
1253     if (UNLIKELY(does_utf8_overflow(s0, send))) {
1254         possible_problems |= UTF8_GOT_OVERFLOW;
1255         uv = UNICODE_REPLACEMENT;
1256     }
1257
1258     /* Check for overlong.  If no problems so far, 'uv' is the correct code
1259      * point value.  Simply see if it is expressible in fewer bytes.  Otherwise
1260      * we must look at the UTF-8 byte sequence itself to see if it is for an
1261      * overlong */
1262     if (     (   LIKELY(! possible_problems)
1263               && UNLIKELY(expectlen > (STRLEN) OFFUNISKIP(uv)))
1264         || (       UNLIKELY(possible_problems)
1265             && (   UNLIKELY(! UTF8_IS_START(*s0))
1266                 || (   curlen > 1
1267                     && UNLIKELY(is_utf8_overlong_given_start_byte_ok(s0,
1268                                                                 send - s0))))))
1269     {
1270         possible_problems |= UTF8_GOT_LONG;
1271
1272         if (   UNLIKELY(   possible_problems & UTF8_GOT_TOO_SHORT)
1273
1274                           /* The calculation in the 'true' branch of this 'if'
1275                            * below won't work if overflows, and isn't needed
1276                            * anyway.  Further below we handle all overflow
1277                            * cases */
1278             &&   LIKELY(! (possible_problems & UTF8_GOT_OVERFLOW)))
1279         {
1280             UV min_uv = uv_so_far;
1281             STRLEN i;
1282
1283             /* Here, the input is both overlong and is missing some trailing
1284              * bytes.  There is no single code point it could be for, but there
1285              * may be enough information present to determine if what we have
1286              * so far is for an unallowed code point, such as for a surrogate.
1287              * The code further below has the intelligence to determine this,
1288              * but just for non-overlong UTF-8 sequences.  What we do here is
1289              * calculate the smallest code point the input could represent if
1290              * there were no too short malformation.  Then we compute and save
1291              * the UTF-8 for that, which is what the code below looks at
1292              * instead of the raw input.  It turns out that the smallest such
1293              * code point is all we need. */
1294             for (i = curlen; i < expectlen; i++) {
1295                 min_uv = UTF8_ACCUMULATE(min_uv,
1296                                      I8_TO_NATIVE_UTF8(UTF_CONTINUATION_MARK));
1297             }
1298
1299             adjusted_s0 = temp_char_buf;
1300             adjusted_send = uvoffuni_to_utf8_flags(adjusted_s0, min_uv, 0);
1301         }
1302     }
1303
1304     /* Here, we have found all the possible problems, except for when the input
1305      * is for a problematic code point not allowed by the input parameters. */
1306
1307                                 /* uv is valid for overlongs */
1308     if (   (   (      LIKELY(! (possible_problems & ~UTF8_GOT_LONG))
1309
1310                       /* isn't problematic if < this */
1311                    && uv >= UNICODE_SURROGATE_FIRST)
1312             || (   UNLIKELY(possible_problems)
1313
1314                           /* if overflow, we know without looking further
1315                            * precisely which of the problematic types it is,
1316                            * and we deal with those in the overflow handling
1317                            * code */
1318                 && LIKELY(! (possible_problems & UTF8_GOT_OVERFLOW))
1319                 && isUTF8_POSSIBLY_PROBLEMATIC(*adjusted_s0)))
1320         && ((flags & ( UTF8_DISALLOW_NONCHAR
1321                       |UTF8_DISALLOW_SURROGATE
1322                       |UTF8_DISALLOW_SUPER
1323                       |UTF8_DISALLOW_ABOVE_31_BIT
1324                       |UTF8_WARN_NONCHAR
1325                       |UTF8_WARN_SURROGATE
1326                       |UTF8_WARN_SUPER
1327                       |UTF8_WARN_ABOVE_31_BIT))
1328                    /* In case of a malformation, 'uv' is not valid, and has
1329                     * been changed to something in the Unicode range.
1330                     * Currently we don't output a deprecation message if there
1331                     * is already a malformation, so we don't have to special
1332                     * case the test immediately below */
1333             || (   UNLIKELY(uv > MAX_NON_DEPRECATED_CP)
1334                 && ckWARN_d(WARN_DEPRECATED))))
1335     {
1336         /* If there were no malformations, or the only malformation is an
1337          * overlong, 'uv' is valid */
1338         if (LIKELY(! (possible_problems & ~UTF8_GOT_LONG))) {
1339             if (UNLIKELY(UNICODE_IS_SURROGATE(uv))) {
1340                 possible_problems |= UTF8_GOT_SURROGATE;
1341             }
1342             else if (UNLIKELY(uv > PERL_UNICODE_MAX)) {
1343                 possible_problems |= UTF8_GOT_SUPER;
1344             }
1345             else if (UNLIKELY(UNICODE_IS_NONCHAR(uv))) {
1346                 possible_problems |= UTF8_GOT_NONCHAR;
1347             }
1348         }
1349         else {  /* Otherwise, need to look at the source UTF-8, possibly
1350                    adjusted to be non-overlong */
1351
1352             if (UNLIKELY(NATIVE_UTF8_TO_I8(*adjusted_s0)
1353                                 >= FIRST_START_BYTE_THAT_IS_DEFINITELY_SUPER))
1354             {
1355                 possible_problems |= UTF8_GOT_SUPER;
1356             }
1357             else if (curlen > 1) {
1358                 if (UNLIKELY(IS_UTF8_2_BYTE_SUPER(
1359                                       NATIVE_UTF8_TO_I8(*adjusted_s0),
1360                                       NATIVE_UTF8_TO_I8(*(adjusted_s0 + 1)))))
1361                 {
1362                     possible_problems |= UTF8_GOT_SUPER;
1363                 }
1364                 else if (UNLIKELY(IS_UTF8_2_BYTE_SURROGATE(
1365                                       NATIVE_UTF8_TO_I8(*adjusted_s0),
1366                                       NATIVE_UTF8_TO_I8(*(adjusted_s0 + 1)))))
1367                 {
1368                     possible_problems |= UTF8_GOT_SURROGATE;
1369                 }
1370             }
1371
1372             /* We need a complete well-formed UTF-8 character to discern
1373              * non-characters, so can't look for them here */
1374         }
1375     }
1376
1377   ready_to_handle_errors:
1378
1379     /* At this point:
1380      * curlen               contains the number of bytes in the sequence that
1381      *                      this call should advance the input by.
1382      * avail_len            gives the available number of bytes passed in, but
1383      *                      only if this is less than the expected number of
1384      *                      bytes, based on the code point's start byte.
1385      * possible_problems'   is 0 if there weren't any problems; otherwise a bit
1386      *                      is set in it for each potential problem found.
1387      * uv                   contains the code point the input sequence
1388      *                      represents; or if there is a problem that prevents
1389      *                      a well-defined value from being computed, it is
1390      *                      some subsitute value, typically the REPLACEMENT
1391      *                      CHARACTER.
1392      * s0                   points to the first byte of the character
1393      * s                    points to just after were we left off processing
1394      *                      the character
1395      * send                 points to just after where that character should
1396      *                      end, based on how many bytes the start byte tells
1397      *                      us should be in it, but no further than s0 +
1398      *                      avail_len
1399      * adjusted_s0          normally is the same as s0, but in case of an
1400      *                      overlong for which the UTF-8 matters below, it is
1401      *                      the first byte of the shortest form representation
1402      *                      of the input.
1403      * adjusted_send        normally is the same as 'send', but if adjusted_s0
1404      *                      is set to something other than s0, this points one
1405      *                      beyond its end
1406      */
1407
1408     if (UNLIKELY(possible_problems)) {
1409         bool disallowed = FALSE;
1410         const U32 orig_problems = possible_problems;
1411
1412         while (possible_problems) { /* Handle each possible problem */
1413             UV pack_warn = 0;
1414             char * message = NULL;
1415
1416             /* Each 'if' clause handles one problem.  They are ordered so that
1417              * the first ones' messages will be displayed before the later
1418              * ones; this is kinda in decreasing severity order.  But the
1419              * overlong must come last, as it changes 'uv' looked at by the
1420              * others */
1421             if (possible_problems & UTF8_GOT_OVERFLOW) {
1422
1423                 /* Overflow means also got a super and are using Perl's
1424                  * extended UTF-8, but we handle all three cases here */
1425                 possible_problems
1426                   &= ~(UTF8_GOT_OVERFLOW|UTF8_GOT_SUPER|UTF8_GOT_ABOVE_31_BIT);
1427                 *errors |= UTF8_GOT_OVERFLOW;
1428
1429                 /* But the API says we flag all errors found */
1430                 if (flags & (UTF8_WARN_SUPER|UTF8_DISALLOW_SUPER)) {
1431                     *errors |= UTF8_GOT_SUPER;
1432                 }
1433                 if (flags
1434                         & (UTF8_WARN_ABOVE_31_BIT|UTF8_DISALLOW_ABOVE_31_BIT))
1435                 {
1436                     *errors |= UTF8_GOT_ABOVE_31_BIT;
1437                 }
1438
1439                 /* Disallow if any of the three categories say to */
1440                 if ( ! (flags &   UTF8_ALLOW_OVERFLOW)
1441                     || (flags & ( UTF8_DISALLOW_SUPER
1442                                  |UTF8_DISALLOW_ABOVE_31_BIT)))
1443                 {
1444                     disallowed = TRUE;
1445                 }
1446
1447                 /* Likewise, warn if any say to, plus if deprecation warnings
1448                  * are on, because this code point is above IV_MAX */
1449                 if (      ckWARN_d(WARN_DEPRECATED)
1450                     || ! (flags & UTF8_ALLOW_OVERFLOW)
1451                     ||   (flags & (UTF8_WARN_SUPER|UTF8_WARN_ABOVE_31_BIT)))
1452                 {
1453
1454                     /* The warnings code explicitly says it doesn't handle the
1455                      * case of packWARN2 and two categories which have
1456                      * parent-child relationship.  Even if it works now to
1457                      * raise the warning if either is enabled, it wouldn't
1458                      * necessarily do so in the future.  We output (only) the
1459                      * most dire warning */
1460                     if (! (flags & UTF8_CHECK_ONLY)) {
1461                         if (ckWARN_d(WARN_UTF8)) {
1462                             pack_warn = packWARN(WARN_UTF8);
1463                         }
1464                         else if (ckWARN_d(WARN_NON_UNICODE)) {
1465                             pack_warn = packWARN(WARN_NON_UNICODE);
1466                         }
1467                         if (pack_warn) {
1468                             message = Perl_form(aTHX_ "%s: %s (overflows)",
1469                                             malformed_text,
1470                                             _byte_dump_string(s0, curlen, 0));
1471                         }
1472                     }
1473                 }
1474             }
1475             else if (possible_problems & UTF8_GOT_EMPTY) {
1476                 possible_problems &= ~UTF8_GOT_EMPTY;
1477                 *errors |= UTF8_GOT_EMPTY;
1478
1479                 if (! (flags & UTF8_ALLOW_EMPTY)) {
1480
1481                     /* This so-called malformation is now treated as a bug in
1482                      * the caller.  If you have nothing to decode, skip calling
1483                      * this function */
1484                     assert(0);
1485
1486                     disallowed = TRUE;
1487                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1488                         pack_warn = packWARN(WARN_UTF8);
1489                         message = Perl_form(aTHX_ "%s (empty string)",
1490                                                    malformed_text);
1491                     }
1492                 }
1493             }
1494             else if (possible_problems & UTF8_GOT_CONTINUATION) {
1495                 possible_problems &= ~UTF8_GOT_CONTINUATION;
1496                 *errors |= UTF8_GOT_CONTINUATION;
1497
1498                 if (! (flags & UTF8_ALLOW_CONTINUATION)) {
1499                     disallowed = TRUE;
1500                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1501                         pack_warn = packWARN(WARN_UTF8);
1502                         message = Perl_form(aTHX_
1503                                 "%s: %s (unexpected continuation byte 0x%02x,"
1504                                 " with no preceding start byte)",
1505                                 malformed_text,
1506                                 _byte_dump_string(s0, 1, 0), *s0);
1507                     }
1508                 }
1509             }
1510             else if (possible_problems & UTF8_GOT_SHORT) {
1511                 possible_problems &= ~UTF8_GOT_SHORT;
1512                 *errors |= UTF8_GOT_SHORT;
1513
1514                 if (! (flags & UTF8_ALLOW_SHORT)) {
1515                     disallowed = TRUE;
1516                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1517                         pack_warn = packWARN(WARN_UTF8);
1518                         message = Perl_form(aTHX_
1519                              "%s: %s (too short; %d byte%s available, need %d)",
1520                              malformed_text,
1521                              _byte_dump_string(s0, send - s0, 0),
1522                              (int)avail_len,
1523                              avail_len == 1 ? "" : "s",
1524                              (int)expectlen);
1525                     }
1526                 }
1527
1528             }
1529             else if (possible_problems & UTF8_GOT_NON_CONTINUATION) {
1530                 possible_problems &= ~UTF8_GOT_NON_CONTINUATION;
1531                 *errors |= UTF8_GOT_NON_CONTINUATION;
1532
1533                 if (! (flags & UTF8_ALLOW_NON_CONTINUATION)) {
1534                     disallowed = TRUE;
1535                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1536
1537                         /* If we don't know for sure that the input length is
1538                          * valid, avoid as much as possible reading past the
1539                          * end of the buffer */
1540                         int printlen = (flags & _UTF8_NO_CONFIDENCE_IN_CURLEN)
1541                                        ? s - s0
1542                                        : send - s0;
1543                         pack_warn = packWARN(WARN_UTF8);
1544                         message = Perl_form(aTHX_ "%s",
1545                             unexpected_non_continuation_text(s0,
1546                                                             printlen,
1547                                                             s - s0,
1548                                                             (int) expectlen));
1549                     }
1550                 }
1551             }
1552             else if (possible_problems & UTF8_GOT_SURROGATE) {
1553                 possible_problems &= ~UTF8_GOT_SURROGATE;
1554
1555                 if (flags & UTF8_WARN_SURROGATE) {
1556                     *errors |= UTF8_GOT_SURROGATE;
1557
1558                     if (   ! (flags & UTF8_CHECK_ONLY)
1559                         && ckWARN_d(WARN_SURROGATE))
1560                     {
1561                         pack_warn = packWARN(WARN_SURROGATE);
1562
1563                         /* These are the only errors that can occur with a
1564                         * surrogate when the 'uv' isn't valid */
1565                         if (orig_problems & UTF8_GOT_TOO_SHORT) {
1566                             message = Perl_form(aTHX_
1567                                     "UTF-16 surrogate (any UTF-8 sequence that"
1568                                     " starts with \"%s\" is for a surrogate)",
1569                                     _byte_dump_string(s0, curlen, 0));
1570                         }
1571                         else {
1572                             message = Perl_form(aTHX_ surrogate_cp_format, uv);
1573                         }
1574                     }
1575                 }
1576
1577                 if (flags & UTF8_DISALLOW_SURROGATE) {
1578                     disallowed = TRUE;
1579                     *errors |= UTF8_GOT_SURROGATE;
1580                 }
1581             }
1582             else if (possible_problems & UTF8_GOT_SUPER) {
1583                 possible_problems &= ~UTF8_GOT_SUPER;
1584
1585                 if (flags & UTF8_WARN_SUPER) {
1586                     *errors |= UTF8_GOT_SUPER;
1587
1588                     if (   ! (flags & UTF8_CHECK_ONLY)
1589                         && ckWARN_d(WARN_NON_UNICODE))
1590                     {
1591                         pack_warn = packWARN(WARN_NON_UNICODE);
1592
1593                         if (orig_problems & UTF8_GOT_TOO_SHORT) {
1594                             message = Perl_form(aTHX_
1595                                     "Any UTF-8 sequence that starts with"
1596                                     " \"%s\" is for a non-Unicode code point,"
1597                                     " may not be portable",
1598                                     _byte_dump_string(s0, curlen, 0));
1599                         }
1600                         else {
1601                             message = Perl_form(aTHX_ super_cp_format, uv);
1602                         }
1603                     }
1604                 }
1605
1606                 /* The maximum code point ever specified by a standard was
1607                  * 2**31 - 1.  Anything larger than that is a Perl extension
1608                  * that very well may not be understood by other applications
1609                  * (including earlier perl versions on EBCDIC platforms).  We
1610                  * test for these after the regular SUPER ones, and before
1611                  * possibly bailing out, so that the slightly more dire warning
1612                  * will override the regular one. */
1613                 if (   (flags & (UTF8_WARN_ABOVE_31_BIT
1614                                 |UTF8_WARN_SUPER
1615                                 |UTF8_DISALLOW_ABOVE_31_BIT))
1616                     && (   (   UNLIKELY(orig_problems & UTF8_GOT_TOO_SHORT)
1617                             && UNLIKELY(is_utf8_cp_above_31_bits(
1618                                                 adjusted_s0,
1619                                                 adjusted_send)))
1620                         || (   LIKELY(! (orig_problems & UTF8_GOT_TOO_SHORT))
1621                             && UNLIKELY(UNICODE_IS_ABOVE_31_BIT(uv)))))
1622                 {
1623                     if (  ! (flags & UTF8_CHECK_ONLY)
1624                         &&  (flags & (UTF8_WARN_ABOVE_31_BIT|UTF8_WARN_SUPER))
1625                         &&  ckWARN_d(WARN_NON_UNICODE))
1626                     {
1627                         pack_warn = packWARN(WARN_NON_UNICODE);
1628
1629                         if (orig_problems & UTF8_GOT_TOO_SHORT) {
1630                             message = Perl_form(aTHX_
1631                                         "Any UTF-8 sequence that starts with"
1632                                         " \"%s\" is for a non-Unicode code"
1633                                         " point, and is not portable",
1634                                         _byte_dump_string(s0, curlen, 0));
1635                         }
1636                         else {
1637                             message = Perl_form(aTHX_
1638                                             above_31_bit_cp_format, uv);
1639                         }
1640                     }
1641
1642                     if (flags & ( UTF8_WARN_ABOVE_31_BIT
1643                                  |UTF8_DISALLOW_ABOVE_31_BIT))
1644                     {
1645                         *errors |= UTF8_GOT_ABOVE_31_BIT;
1646
1647                         if (flags & UTF8_DISALLOW_ABOVE_31_BIT) {
1648                             disallowed = TRUE;
1649                         }
1650                     }
1651                 }
1652
1653                 if (flags & UTF8_DISALLOW_SUPER) {
1654                     *errors |= UTF8_GOT_SUPER;
1655                     disallowed = TRUE;
1656                 }
1657
1658                 /* The deprecated warning overrides any non-deprecated one.  If
1659                  * there are other problems, a deprecation message is not
1660                  * really helpful, so don't bother to raise it in that case.
1661                  * This also keeps the code from having to handle the case
1662                  * where 'uv' is not valid. */
1663                 if (   ! (orig_problems
1664                                     & (UTF8_GOT_TOO_SHORT|UTF8_GOT_OVERFLOW))
1665                     && UNLIKELY(uv > MAX_NON_DEPRECATED_CP)
1666                     && ckWARN_d(WARN_DEPRECATED))
1667                 {
1668                     message = Perl_form(aTHX_ cp_above_legal_max,
1669                                               uv, MAX_NON_DEPRECATED_CP);
1670                     pack_warn = packWARN(WARN_DEPRECATED);
1671                 }
1672             }
1673             else if (possible_problems & UTF8_GOT_NONCHAR) {
1674                 possible_problems &= ~UTF8_GOT_NONCHAR;
1675
1676                 if (flags & UTF8_WARN_NONCHAR) {
1677                     *errors |= UTF8_GOT_NONCHAR;
1678
1679                     if (  ! (flags & UTF8_CHECK_ONLY)
1680                         && ckWARN_d(WARN_NONCHAR))
1681                     {
1682                         /* The code above should have guaranteed that we don't
1683                          * get here with errors other than overlong */
1684                         assert (! (orig_problems
1685                                         & ~(UTF8_GOT_LONG|UTF8_GOT_NONCHAR)));
1686
1687                         pack_warn = packWARN(WARN_NONCHAR);
1688                         message = Perl_form(aTHX_ nonchar_cp_format, uv);
1689                     }
1690                 }
1691
1692                 if (flags & UTF8_DISALLOW_NONCHAR) {
1693                     disallowed = TRUE;
1694                     *errors |= UTF8_GOT_NONCHAR;
1695                 }
1696             }
1697             else if (possible_problems & UTF8_GOT_LONG) {
1698                 possible_problems &= ~UTF8_GOT_LONG;
1699                 *errors |= UTF8_GOT_LONG;
1700
1701                 if (flags & UTF8_ALLOW_LONG) {
1702
1703                     /* We don't allow the actual overlong value, unless the
1704                      * special extra bit is also set */
1705                     if (! (flags & (   UTF8_ALLOW_LONG_AND_ITS_VALUE
1706                                     & ~UTF8_ALLOW_LONG)))
1707                     {
1708                         uv = UNICODE_REPLACEMENT;
1709                     }
1710                 }
1711                 else {
1712                     disallowed = TRUE;
1713
1714                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1715                         pack_warn = packWARN(WARN_UTF8);
1716
1717                         /* These error types cause 'uv' to be something that
1718                          * isn't what was intended, so can't use it in the
1719                          * message.  The other error types either can't
1720                          * generate an overlong, or else the 'uv' is valid */
1721                         if (orig_problems &
1722                                         (UTF8_GOT_TOO_SHORT|UTF8_GOT_OVERFLOW))
1723                         {
1724                             message = Perl_form(aTHX_
1725                                     "%s: %s (any UTF-8 sequence that starts"
1726                                     " with \"%s\" is overlong which can and"
1727                                     " should be represented with a"
1728                                     " different, shorter sequence)",
1729                                     malformed_text,
1730                                     _byte_dump_string(s0, send - s0, 0),
1731                                     _byte_dump_string(s0, curlen, 0));
1732                         }
1733                         else {
1734                             U8 tmpbuf[UTF8_MAXBYTES+1];
1735                             const U8 * const e = uvoffuni_to_utf8_flags(tmpbuf,
1736                                                                         uv, 0);
1737                             const char * preface = (uv <= PERL_UNICODE_MAX)
1738                                                    ? "U+"
1739                                                    : "0x";
1740                             message = Perl_form(aTHX_
1741                                 "%s: %s (overlong; instead use %s to represent"
1742                                 " %s%0*" UVXf ")",
1743                                 malformed_text,
1744                                 _byte_dump_string(s0, send - s0, 0),
1745                                 _byte_dump_string(tmpbuf, e - tmpbuf, 0),
1746                                 preface,
1747                                 ((uv < 256) ? 2 : 4), /* Field width of 2 for
1748                                                          small code points */
1749                                 uv);
1750                         }
1751                     }
1752                 }
1753             } /* End of looking through the possible flags */
1754
1755             /* Display the message (if any) for the problem being handled in
1756              * this iteration of the loop */
1757             if (message) {
1758                 if (PL_op)
1759                     Perl_warner(aTHX_ pack_warn, "%s in %s", message,
1760                                                  OP_DESC(PL_op));
1761                 else
1762                     Perl_warner(aTHX_ pack_warn, "%s", message);
1763             }
1764         }   /* End of 'while (possible_problems)' */
1765
1766         /* Since there was a possible problem, the returned length may need to
1767          * be changed from the one stored at the beginning of this function.
1768          * Instead of trying to figure out if that's needed, just do it. */
1769         if (retlen) {
1770             *retlen = curlen;
1771         }
1772
1773         if (disallowed) {
1774             if (flags & UTF8_CHECK_ONLY && retlen) {
1775                 *retlen = ((STRLEN) -1);
1776             }
1777             return 0;
1778         }
1779     }
1780
1781     return UNI_TO_NATIVE(uv);
1782 }
1783
1784 /*
1785 =for apidoc utf8_to_uvchr_buf
1786
1787 Returns the native code point of the first character in the string C<s> which
1788 is assumed to be in UTF-8 encoding; C<send> points to 1 beyond the end of C<s>.
1789 C<*retlen> will be set to the length, in bytes, of that character.
1790
1791 If C<s> does not point to a well-formed UTF-8 character and UTF8 warnings are
1792 enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
1793 C<NULL>) to -1.  If those warnings are off, the computed value, if well-defined
1794 (or the Unicode REPLACEMENT CHARACTER if not), is silently returned, and
1795 C<*retlen> is set (if C<retlen> isn't C<NULL>) so that (S<C<s> + C<*retlen>>) is
1796 the next possible position in C<s> that could begin a non-malformed character.
1797 See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is
1798 returned.
1799
1800 Code points above the platform's C<IV_MAX> will raise a deprecation warning,
1801 unless those are turned off.
1802
1803 =cut
1804
1805 Also implemented as a macro in utf8.h
1806
1807 */
1808
1809
1810 UV
1811 Perl_utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
1812 {
1813     PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF;
1814
1815     assert(s < send);
1816
1817     return utf8n_to_uvchr(s, send - s, retlen,
1818                      ckWARN_d(WARN_UTF8) ? 0 : UTF8_ALLOW_ANY);
1819 }
1820
1821 /* This is marked as deprecated
1822  *
1823 =for apidoc utf8_to_uvuni_buf
1824
1825 Only in very rare circumstances should code need to be dealing in Unicode
1826 (as opposed to native) code points.  In those few cases, use
1827 C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|/utf8_to_uvchr_buf>> instead.
1828
1829 Returns the Unicode (not-native) code point of the first character in the
1830 string C<s> which
1831 is assumed to be in UTF-8 encoding; C<send> points to 1 beyond the end of C<s>.
1832 C<retlen> will be set to the length, in bytes, of that character.
1833
1834 If C<s> does not point to a well-formed UTF-8 character and UTF8 warnings are
1835 enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
1836 NULL) to -1.  If those warnings are off, the computed value if well-defined (or
1837 the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
1838 is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
1839 next possible position in C<s> that could begin a non-malformed character.
1840 See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
1841
1842 Code points above the platform's C<IV_MAX> will raise a deprecation warning,
1843 unless those are turned off.
1844
1845 =cut
1846 */
1847
1848 UV
1849 Perl_utf8_to_uvuni_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
1850 {
1851     PERL_ARGS_ASSERT_UTF8_TO_UVUNI_BUF;
1852
1853     assert(send > s);
1854
1855     /* Call the low level routine, asking for checks */
1856     return NATIVE_TO_UNI(utf8_to_uvchr_buf(s, send, retlen));
1857 }
1858
1859 /*
1860 =for apidoc utf8_length
1861
1862 Return the length of the UTF-8 char encoded string C<s> in characters.
1863 Stops at C<e> (inclusive).  If C<e E<lt> s> or if the scan would end
1864 up past C<e>, croaks.
1865
1866 =cut
1867 */
1868
1869 STRLEN
1870 Perl_utf8_length(pTHX_ const U8 *s, const U8 *e)
1871 {
1872     STRLEN len = 0;
1873
1874     PERL_ARGS_ASSERT_UTF8_LENGTH;
1875
1876     /* Note: cannot use UTF8_IS_...() too eagerly here since e.g.
1877      * the bitops (especially ~) can create illegal UTF-8.
1878      * In other words: in Perl UTF-8 is not just for Unicode. */
1879
1880     if (e < s)
1881         goto warn_and_return;
1882     while (s < e) {
1883         s += UTF8SKIP(s);
1884         len++;
1885     }
1886
1887     if (e != s) {
1888         len--;
1889         warn_and_return:
1890         if (PL_op)
1891             Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
1892                              "%s in %s", unees, OP_DESC(PL_op));
1893         else
1894             Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "%s", unees);
1895     }
1896
1897     return len;
1898 }
1899
1900 /*
1901 =for apidoc bytes_cmp_utf8
1902
1903 Compares the sequence of characters (stored as octets) in C<b>, C<blen> with the
1904 sequence of characters (stored as UTF-8)
1905 in C<u>, C<ulen>.  Returns 0 if they are
1906 equal, -1 or -2 if the first string is less than the second string, +1 or +2
1907 if the first string is greater than the second string.
1908
1909 -1 or +1 is returned if the shorter string was identical to the start of the
1910 longer string.  -2 or +2 is returned if
1911 there was a difference between characters
1912 within the strings.
1913
1914 =cut
1915 */
1916
1917 int
1918 Perl_bytes_cmp_utf8(pTHX_ const U8 *b, STRLEN blen, const U8 *u, STRLEN ulen)
1919 {
1920     const U8 *const bend = b + blen;
1921     const U8 *const uend = u + ulen;
1922
1923     PERL_ARGS_ASSERT_BYTES_CMP_UTF8;
1924
1925     while (b < bend && u < uend) {
1926         U8 c = *u++;
1927         if (!UTF8_IS_INVARIANT(c)) {
1928             if (UTF8_IS_DOWNGRADEABLE_START(c)) {
1929                 if (u < uend) {
1930                     U8 c1 = *u++;
1931                     if (UTF8_IS_CONTINUATION(c1)) {
1932                         c = EIGHT_BIT_UTF8_TO_NATIVE(c, c1);
1933                     } else {
1934                         /* diag_listed_as: Malformed UTF-8 character%s */
1935                         Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
1936                               "%s %s%s",
1937                               unexpected_non_continuation_text(u - 2, 2, 1, 2),
1938                               PL_op ? " in " : "",
1939                               PL_op ? OP_DESC(PL_op) : "");
1940                         return -2;
1941                     }
1942                 } else {
1943                     if (PL_op)
1944                         Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
1945                                          "%s in %s", unees, OP_DESC(PL_op));
1946                     else
1947                         Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "%s", unees);
1948                     return -2; /* Really want to return undef :-)  */
1949                 }
1950             } else {
1951                 return -2;
1952             }
1953         }
1954         if (*b != c) {
1955             return *b < c ? -2 : +2;
1956         }
1957         ++b;
1958     }
1959
1960     if (b == bend && u == uend)
1961         return 0;
1962
1963     return b < bend ? +1 : -1;
1964 }
1965
1966 /*
1967 =for apidoc utf8_to_bytes
1968
1969 Converts a string C<"s"> of length C<*lenp> from UTF-8 into native byte encoding.
1970 Unlike L</bytes_to_utf8>, this over-writes the original string, and
1971 updates C<*lenp> to contain the new length.
1972 Returns zero on failure (leaving C<"s"> unchanged) setting C<*lenp> to -1.
1973
1974 Upon successful return, the number of variants in the string can be computed by
1975 having saved the value of C<*lenp> before the call, and subtracting the
1976 after-call value of C<*lenp> from it.
1977
1978 If you need a copy of the string, see L</bytes_from_utf8>.
1979
1980 =cut
1981 */
1982
1983 U8 *
1984 Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *lenp)
1985 {
1986     U8 * first_variant;
1987
1988     PERL_ARGS_ASSERT_UTF8_TO_BYTES;
1989     PERL_UNUSED_CONTEXT;
1990
1991     /* This is a no-op if no variants at all in the input */
1992     if (is_utf8_invariant_string_loc(s, *lenp, (const U8 **) &first_variant)) {
1993         return s;
1994     }
1995
1996     {
1997         U8 * const save = s;
1998         U8 * const send = s + *lenp;
1999         U8 * d;
2000
2001         /* Nothing before the first variant needs to be changed, so start the real
2002          * work there */
2003         s = first_variant;
2004         while (s < send) {
2005             if (! UTF8_IS_INVARIANT(*s)) {
2006                 if (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(s, send)) {
2007                     *lenp = ((STRLEN) -1);
2008                     return 0;
2009                 }
2010                 s++;
2011             }
2012             s++;
2013         }
2014
2015         /* Is downgradable, so do it */
2016         d = s = first_variant;
2017         while (s < send) {
2018             U8 c = *s++;
2019             if (! UVCHR_IS_INVARIANT(c)) {
2020                 /* Then it is two-byte encoded */
2021                 c = EIGHT_BIT_UTF8_TO_NATIVE(c, *s);
2022                 s++;
2023             }
2024             *d++ = c;
2025         }
2026         *d = '\0';
2027         *lenp = d - save;
2028
2029         return save;
2030     }
2031 }
2032
2033 /*
2034 =for apidoc bytes_from_utf8
2035
2036 Converts a potentially UTF-8 encoded string C<s> of length C<*lenp> into native
2037 byte encoding.  On input, the boolean C<*is_utf8p> gives whether or not C<s> is
2038 actually encoded in UTF-8.
2039
2040 Unlike L</utf8_to_bytes> but like L</bytes_to_utf8>, this is non-destructive of
2041 the input string.
2042
2043 Do nothing if C<*is_utf8p> is 0, or if there are code points in the string
2044 not expressible in native byte encoding.  In these cases, C<*is_utf8p> and
2045 C<*lenp> are unchanged, and the return value is the original C<s>.
2046
2047 Otherwise, C<*is_utf8p> is set to 0, and the return value is a pointer to a
2048 newly created string containing a downgraded copy of C<s>, and whose length is
2049 returned in C<*lenp>, updated.  The new string is C<NUL>-terminated.
2050
2051 Upon successful return, the number of variants in the string can be computed by
2052 having saved the value of C<*lenp> before the call, and subtracting the
2053 after-call value of C<*lenp> from it.
2054
2055 =cut
2056
2057 There is a macro that avoids this function call, but this is retained for
2058 anyone who calls it with the Perl_ prefix */
2059
2060 U8 *
2061 Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8p)
2062 {
2063     PERL_ARGS_ASSERT_BYTES_FROM_UTF8;
2064     PERL_UNUSED_CONTEXT;
2065
2066     return bytes_from_utf8_loc(s, lenp, is_utf8p, NULL);
2067 }
2068
2069 /*
2070 No = here because currently externally undocumented
2071 for apidoc bytes_from_utf8_loc
2072
2073 Like C<L</bytes_from_utf8>()>, but takes an extra parameter, a pointer to where
2074 to store the location of the first character in C<"s"> that cannot be
2075 converted to non-UTF8.
2076
2077 If that parameter is C<NULL>, this function behaves identically to
2078 C<bytes_from_utf8>.
2079
2080 Otherwise if C<*is_utf8p> is 0 on input, the function behaves identically to
2081 C<bytes_from_utf8>, except it also sets C<*first_non_downgradable> to C<NULL>.
2082
2083 Otherwise, the function returns a newly created C<NUL>-terminated string
2084 containing the non-UTF8 equivalent of the convertible first portion of
2085 C<"s">.  C<*lenp> is set to its length, not including the terminating C<NUL>.
2086 If the entire input string was converted, C<*is_utf8p> is set to a FALSE value,
2087 and C<*first_non_downgradable> is set to C<NULL>.
2088
2089 Otherwise, C<*first_non_downgradable> set to point to the first byte of the
2090 first character in the original string that wasn't converted.  C<*is_utf8p> is
2091 unchanged.  Note that the new string may have length 0.
2092
2093 Another way to look at it is, if C<*first_non_downgradable> is non-C<NULL> and
2094 C<*is_utf8p> is TRUE, this function starts at the beginning of C<"s"> and
2095 converts as many characters in it as possible stopping at the first one it
2096 finds that can't be converted to non-UTF-8.  C<*first_non_downgradable> is
2097 set to point to that.  The function returns the portion that could be converted
2098 in a newly created C<NUL>-terminated string, and C<*lenp> is set to its length,
2099 not including the terminating C<NUL>.  If the very first character in the
2100 original could not be converted, C<*lenp> will be 0, and the new string will
2101 contain just a single C<NUL>.  If the entire input string was converted,
2102 C<*is_utf8p> is set to FALSE and C<*first_non_downgradable> is set to C<NULL>.
2103
2104 Upon successful return, the number of variants in the converted portion of the
2105 string can be computed by having saved the value of C<*lenp> before the call,
2106 and subtracting the after-call value of C<*lenp> from it.
2107
2108 =cut
2109
2110
2111 */
2112
2113 U8 *
2114 Perl_bytes_from_utf8_loc(const U8 *s, STRLEN *lenp, bool *is_utf8p, const U8** first_unconverted)
2115 {
2116     U8 *d;
2117     const U8 *original = s;
2118     U8 *converted_start;
2119     const U8 *send = s + *lenp;
2120
2121     PERL_ARGS_ASSERT_BYTES_FROM_UTF8_LOC;
2122
2123     if (! *is_utf8p) {
2124         if (first_unconverted) {
2125             *first_unconverted = NULL;
2126         }
2127
2128         return (U8 *) original;
2129     }
2130
2131     Newx(d, (*lenp) + 1, U8);
2132
2133     converted_start = d;
2134     while (s < send) {
2135         U8 c = *s++;
2136         if (! UTF8_IS_INVARIANT(c)) {
2137
2138             /* Then it is multi-byte encoded.  If the code point is above 0xFF,
2139              * have to stop now */
2140             if (UNLIKELY (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(s - 1, send))) {
2141                 if (first_unconverted) {
2142                     *first_unconverted = s - 1;
2143                     goto finish_and_return;
2144                 }
2145                 else {
2146                     Safefree(converted_start);
2147                     return (U8 *) original;
2148                 }
2149             }
2150
2151             c = EIGHT_BIT_UTF8_TO_NATIVE(c, *s);
2152             s++;
2153         }
2154         *d++ = c;
2155     }
2156
2157     /* Here, converted the whole of the input */
2158     *is_utf8p = FALSE;
2159     if (first_unconverted) {
2160         *first_unconverted = NULL;
2161     }
2162
2163   finish_and_return:
2164         *d = '\0';
2165         *lenp = d - converted_start;
2166
2167     /* Trim unused space */
2168     Renew(converted_start, *lenp + 1, U8);
2169
2170     return converted_start;
2171 }
2172
2173 /*
2174 =for apidoc bytes_to_utf8
2175
2176 Converts a string C<s> of length C<*lenp> bytes from the native encoding into
2177 UTF-8.
2178 Returns a pointer to the newly-created string, and sets C<*lenp> to
2179 reflect the new length in bytes.
2180
2181 Upon successful return, the number of variants in the string can be computed by
2182 having saved the value of C<*lenp> before the call, and subtracting it from the
2183 after-call value of C<*lenp>.
2184
2185 A C<NUL> character will be written after the end of the string.
2186
2187 If you want to convert to UTF-8 from encodings other than
2188 the native (Latin1 or EBCDIC),
2189 see L</sv_recode_to_utf8>().
2190
2191 =cut
2192 */
2193
2194 U8*
2195 Perl_bytes_to_utf8(pTHX_ const U8 *s, STRLEN *lenp)
2196 {
2197     const U8 * const send = s + (*lenp);
2198     U8 *d;
2199     U8 *dst;
2200
2201     PERL_ARGS_ASSERT_BYTES_TO_UTF8;
2202     PERL_UNUSED_CONTEXT;
2203
2204     Newx(d, (*lenp) * 2 + 1, U8);
2205     dst = d;
2206
2207     while (s < send) {
2208         append_utf8_from_native_byte(*s, &d);
2209         s++;
2210     }
2211     *d = '\0';
2212     *lenp = d-dst;
2213     return dst;
2214 }
2215
2216 /*
2217  * Convert native (big-endian) or reversed (little-endian) UTF-16 to UTF-8.
2218  *
2219  * Destination must be pre-extended to 3/2 source.  Do not use in-place.
2220  * We optimize for native, for obvious reasons. */
2221
2222 U8*
2223 Perl_utf16_to_utf8(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
2224 {
2225     U8* pend;
2226     U8* dstart = d;
2227
2228     PERL_ARGS_ASSERT_UTF16_TO_UTF8;
2229
2230     if (bytelen & 1)
2231         Perl_croak(aTHX_ "panic: utf16_to_utf8: odd bytelen %" UVuf,
2232                                                                (UV)bytelen);
2233
2234     pend = p + bytelen;
2235
2236     while (p < pend) {
2237         UV uv = (p[0] << 8) + p[1]; /* UTF-16BE */
2238         p += 2;
2239         if (OFFUNI_IS_INVARIANT(uv)) {
2240             *d++ = LATIN1_TO_NATIVE((U8) uv);
2241             continue;
2242         }
2243         if (uv <= MAX_UTF8_TWO_BYTE) {
2244             *d++ = UTF8_TWO_BYTE_HI(UNI_TO_NATIVE(uv));
2245             *d++ = UTF8_TWO_BYTE_LO(UNI_TO_NATIVE(uv));
2246             continue;
2247         }
2248 #define FIRST_HIGH_SURROGATE UNICODE_SURROGATE_FIRST
2249 #define LAST_HIGH_SURROGATE  0xDBFF
2250 #define FIRST_LOW_SURROGATE  0xDC00
2251 #define LAST_LOW_SURROGATE   UNICODE_SURROGATE_LAST
2252
2253         /* This assumes that most uses will be in the first Unicode plane, not
2254          * needing surrogates */
2255         if (UNLIKELY(uv >= UNICODE_SURROGATE_FIRST
2256                   && uv <= UNICODE_SURROGATE_LAST))
2257         {
2258             if (UNLIKELY(p >= pend) || UNLIKELY(uv > LAST_HIGH_SURROGATE)) {
2259                 Perl_croak(aTHX_ "Malformed UTF-16 surrogate");
2260             }
2261             else {
2262                 UV low = (p[0] << 8) + p[1];
2263                 if (   UNLIKELY(low < FIRST_LOW_SURROGATE)
2264                     || UNLIKELY(low > LAST_LOW_SURROGATE))
2265                 {
2266                     Perl_croak(aTHX_ "Malformed UTF-16 surrogate");
2267                 }
2268                 p += 2;
2269                 uv = ((uv - FIRST_HIGH_SURROGATE) << 10)
2270                                        + (low - FIRST_LOW_SURROGATE) + 0x10000;
2271             }
2272         }
2273 #ifdef EBCDIC
2274         d = uvoffuni_to_utf8_flags(d, uv, 0);
2275 #else
2276         if (uv < 0x10000) {
2277             *d++ = (U8)(( uv >> 12)         | 0xe0);
2278             *d++ = (U8)(((uv >>  6) & 0x3f) | 0x80);
2279             *d++ = (U8)(( uv        & 0x3f) | 0x80);
2280             continue;
2281         }
2282         else {
2283             *d++ = (U8)(( uv >> 18)         | 0xf0);
2284             *d++ = (U8)(((uv >> 12) & 0x3f) | 0x80);
2285             *d++ = (U8)(((uv >>  6) & 0x3f) | 0x80);
2286             *d++ = (U8)(( uv        & 0x3f) | 0x80);
2287             continue;
2288         }
2289 #endif
2290     }
2291     *newlen = d - dstart;
2292     return d;
2293 }
2294
2295 /* Note: this one is slightly destructive of the source. */
2296
2297 U8*
2298 Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
2299 {
2300     U8* s = (U8*)p;
2301     U8* const send = s + bytelen;
2302
2303     PERL_ARGS_ASSERT_UTF16_TO_UTF8_REVERSED;
2304
2305     if (bytelen & 1)
2306         Perl_croak(aTHX_ "panic: utf16_to_utf8_reversed: odd bytelen %" UVuf,
2307                    (UV)bytelen);
2308
2309     while (s < send) {
2310         const U8 tmp = s[0];
2311         s[0] = s[1];
2312         s[1] = tmp;
2313         s += 2;
2314     }
2315     return utf16_to_utf8(p, d, bytelen, newlen);
2316 }
2317
2318 bool
2319 Perl__is_uni_FOO(pTHX_ const U8 classnum, const UV c)
2320 {
2321     U8 tmpbuf[UTF8_MAXBYTES+1];
2322     uvchr_to_utf8(tmpbuf, c);
2323     return _is_utf8_FOO_with_len(classnum, tmpbuf, tmpbuf + sizeof(tmpbuf));
2324 }
2325
2326 /* Internal function so we can deprecate the external one, and call
2327    this one from other deprecated functions in this file */
2328
2329 bool
2330 Perl__is_utf8_idstart(pTHX_ const U8 *p)
2331 {
2332     PERL_ARGS_ASSERT__IS_UTF8_IDSTART;
2333
2334     if (*p == '_')
2335         return TRUE;
2336     return is_utf8_common(p, &PL_utf8_idstart, "IdStart", NULL);
2337 }
2338
2339 bool
2340 Perl__is_uni_perl_idcont(pTHX_ UV c)
2341 {
2342     U8 tmpbuf[UTF8_MAXBYTES+1];
2343     uvchr_to_utf8(tmpbuf, c);
2344     return _is_utf8_perl_idcont_with_len(tmpbuf, tmpbuf + sizeof(tmpbuf));
2345 }
2346
2347 bool
2348 Perl__is_uni_perl_idstart(pTHX_ UV c)
2349 {
2350     U8 tmpbuf[UTF8_MAXBYTES+1];
2351     uvchr_to_utf8(tmpbuf, c);
2352     return _is_utf8_perl_idstart_with_len(tmpbuf, tmpbuf + sizeof(tmpbuf));
2353 }
2354
2355 UV
2356 Perl__to_upper_title_latin1(pTHX_ const U8 c, U8* p, STRLEN *lenp,
2357                                   const char S_or_s)
2358 {
2359     /* We have the latin1-range values compiled into the core, so just use
2360      * those, converting the result to UTF-8.  The only difference between upper
2361      * and title case in this range is that LATIN_SMALL_LETTER_SHARP_S is
2362      * either "SS" or "Ss".  Which one to use is passed into the routine in
2363      * 'S_or_s' to avoid a test */
2364
2365     UV converted = toUPPER_LATIN1_MOD(c);
2366
2367     PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1;
2368
2369     assert(S_or_s == 'S' || S_or_s == 's');
2370
2371     if (UVCHR_IS_INVARIANT(converted)) { /* No difference between the two for
2372                                              characters in this range */
2373         *p = (U8) converted;
2374         *lenp = 1;
2375         return converted;
2376     }
2377
2378     /* toUPPER_LATIN1_MOD gives the correct results except for three outliers,
2379      * which it maps to one of them, so as to only have to have one check for
2380      * it in the main case */
2381     if (UNLIKELY(converted == LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)) {
2382         switch (c) {
2383             case LATIN_SMALL_LETTER_Y_WITH_DIAERESIS:
2384                 converted = LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS;
2385                 break;
2386             case MICRO_SIGN:
2387                 converted = GREEK_CAPITAL_LETTER_MU;
2388                 break;
2389 #if    UNICODE_MAJOR_VERSION > 2                                        \
2390    || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1           \
2391                                   && UNICODE_DOT_DOT_VERSION >= 8)
2392             case LATIN_SMALL_LETTER_SHARP_S:
2393                 *(p)++ = 'S';
2394                 *p = S_or_s;
2395                 *lenp = 2;
2396                 return 'S';
2397 #endif
2398             default:
2399                 Perl_croak(aTHX_ "panic: to_upper_title_latin1 did not expect"
2400                                  " '%c' to map to '%c'",
2401                                  c, LATIN_SMALL_LETTER_Y_WITH_DIAERESIS);
2402                 NOT_REACHED; /* NOTREACHED */
2403         }
2404     }
2405
2406     *(p)++ = UTF8_TWO_BYTE_HI(converted);
2407     *p = UTF8_TWO_BYTE_LO(converted);
2408     *lenp = 2;
2409
2410     return converted;
2411 }
2412
2413 /* Call the function to convert a UTF-8 encoded character to the specified case.
2414  * Note that there may be more than one character in the result.
2415  * INP is a pointer to the first byte of the input character
2416  * OUTP will be set to the first byte of the string of changed characters.  It
2417  *      needs to have space for UTF8_MAXBYTES_CASE+1 bytes
2418  * LENP will be set to the length in bytes of the string of changed characters
2419  *
2420  * The functions return the ordinal of the first character in the string of
2421  * OUTP */
2422 #define CALL_UPPER_CASE(uv, s, d, lenp)                                     \
2423                 _to_utf8_case(uv, s, d, lenp, &PL_utf8_toupper, "ToUc", "")
2424 #define CALL_TITLE_CASE(uv, s, d, lenp)                                     \
2425                 _to_utf8_case(uv, s, d, lenp, &PL_utf8_totitle, "ToTc", "")
2426 #define CALL_LOWER_CASE(uv, s, d, lenp)                                     \
2427                 _to_utf8_case(uv, s, d, lenp, &PL_utf8_tolower, "ToLc", "")
2428
2429 /* This additionally has the input parameter 'specials', which if non-zero will
2430  * cause this to use the specials hash for folding (meaning get full case
2431  * folding); otherwise, when zero, this implies a simple case fold */
2432 #define CALL_FOLD_CASE(uv, s, d, lenp, specials)                            \
2433 _to_utf8_case(uv, s, d, lenp, &PL_utf8_tofold, "ToCf", (specials) ? "" : NULL)
2434
2435 UV
2436 Perl_to_uni_upper(pTHX_ UV c, U8* p, STRLEN *lenp)
2437 {
2438     /* Convert the Unicode character whose ordinal is <c> to its uppercase
2439      * version and store that in UTF-8 in <p> and its length in bytes in <lenp>.
2440      * Note that the <p> needs to be at least UTF8_MAXBYTES_CASE+1 bytes since
2441      * the changed version may be longer than the original character.
2442      *
2443      * The ordinal of the first character of the changed version is returned
2444      * (but note, as explained above, that there may be more.) */
2445
2446     PERL_ARGS_ASSERT_TO_UNI_UPPER;
2447
2448     if (c < 256) {
2449         return _to_upper_title_latin1((U8) c, p, lenp, 'S');
2450     }
2451
2452     uvchr_to_utf8(p, c);
2453     return CALL_UPPER_CASE(c, p, p, lenp);
2454 }
2455
2456 UV
2457 Perl_to_uni_title(pTHX_ UV c, U8* p, STRLEN *lenp)
2458 {
2459     PERL_ARGS_ASSERT_TO_UNI_TITLE;
2460
2461     if (c < 256) {
2462         return _to_upper_title_latin1((U8) c, p, lenp, 's');
2463     }
2464
2465     uvchr_to_utf8(p, c);
2466     return CALL_TITLE_CASE(c, p, p, lenp);
2467 }
2468
2469 STATIC U8
2470 S_to_lower_latin1(const U8 c, U8* p, STRLEN *lenp, const char dummy)
2471 {
2472     /* We have the latin1-range values compiled into the core, so just use
2473      * those, converting the result to UTF-8.  Since the result is always just
2474      * one character, we allow <p> to be NULL */
2475
2476     U8 converted = toLOWER_LATIN1(c);
2477
2478     PERL_UNUSED_ARG(dummy);
2479
2480     if (p != NULL) {
2481         if (NATIVE_BYTE_IS_INVARIANT(converted)) {
2482             *p = converted;
2483             *lenp = 1;
2484         }
2485         else {
2486             /* Result is known to always be < 256, so can use the EIGHT_BIT
2487              * macros */
2488             *p = UTF8_EIGHT_BIT_HI(converted);
2489             *(p+1) = UTF8_EIGHT_BIT_LO(converted);
2490             *lenp = 2;
2491         }
2492     }
2493     return converted;
2494 }
2495
2496 UV
2497 Perl_to_uni_lower(pTHX_ UV c, U8* p, STRLEN *lenp)
2498 {
2499     PERL_ARGS_ASSERT_TO_UNI_LOWER;
2500
2501     if (c < 256) {
2502         return to_lower_latin1((U8) c, p, lenp, 0 /* 0 is a dummy arg */ );
2503     }
2504
2505     uvchr_to_utf8(p, c);
2506     return CALL_LOWER_CASE(c, p, p, lenp);
2507 }
2508
2509 UV
2510 Perl__to_fold_latin1(pTHX_ const U8 c, U8* p, STRLEN *lenp,
2511                            const unsigned int flags)
2512 {
2513     /* Corresponds to to_lower_latin1(); <flags> bits meanings:
2514      *      FOLD_FLAGS_NOMIX_ASCII iff non-ASCII to ASCII folds are prohibited
2515      *      FOLD_FLAGS_FULL  iff full folding is to be used;
2516      *
2517      *  Not to be used for locale folds
2518      */
2519
2520     UV converted;
2521
2522     PERL_ARGS_ASSERT__TO_FOLD_LATIN1;
2523     PERL_UNUSED_CONTEXT;
2524
2525     assert (! (flags & FOLD_FLAGS_LOCALE));
2526
2527     if (UNLIKELY(c == MICRO_SIGN)) {
2528         converted = GREEK_SMALL_LETTER_MU;
2529     }
2530 #if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
2531    || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
2532                                       || UNICODE_DOT_DOT_VERSION > 0)
2533     else if (   (flags & FOLD_FLAGS_FULL)
2534              && UNLIKELY(c == LATIN_SMALL_LETTER_SHARP_S))
2535     {
2536         /* If can't cross 127/128 boundary, can't return "ss"; instead return
2537          * two U+017F characters, as fc("\df") should eq fc("\x{17f}\x{17f}")
2538          * under those circumstances. */
2539         if (flags & FOLD_FLAGS_NOMIX_ASCII) {
2540             *lenp = 2 * sizeof(LATIN_SMALL_LETTER_LONG_S_UTF8) - 2;
2541             Copy(LATIN_SMALL_LETTER_LONG_S_UTF8 LATIN_SMALL_LETTER_LONG_S_UTF8,
2542                  p, *lenp, U8);
2543             return LATIN_SMALL_LETTER_LONG_S;
2544         }
2545         else {
2546             *(p)++ = 's';
2547             *p = 's';
2548             *lenp = 2;
2549             return 's';
2550         }
2551     }
2552 #endif
2553     else { /* In this range the fold of all other characters is their lower
2554               case */
2555         converted = toLOWER_LATIN1(c);
2556     }
2557
2558     if (UVCHR_IS_INVARIANT(converted)) {
2559         *p = (U8) converted;
2560         *lenp = 1;
2561     }
2562     else {
2563         *(p)++ = UTF8_TWO_BYTE_HI(converted);
2564         *p = UTF8_TWO_BYTE_LO(converted);
2565         *lenp = 2;
2566     }
2567
2568     return converted;
2569 }
2570
2571 UV
2572 Perl__to_uni_fold_flags(pTHX_ UV c, U8* p, STRLEN *lenp, U8 flags)
2573 {
2574
2575     /* Not currently externally documented, and subject to change
2576      *  <flags> bits meanings:
2577      *      FOLD_FLAGS_FULL  iff full folding is to be used;
2578      *      FOLD_FLAGS_LOCALE is set iff the rules from the current underlying
2579      *                        locale are to be used.
2580      *      FOLD_FLAGS_NOMIX_ASCII iff non-ASCII to ASCII folds are prohibited
2581      */
2582
2583     PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS;
2584
2585     if (flags & FOLD_FLAGS_LOCALE) {
2586         /* Treat a UTF-8 locale as not being in locale at all */
2587         if (IN_UTF8_CTYPE_LOCALE) {
2588             flags &= ~FOLD_FLAGS_LOCALE;
2589         }
2590         else {
2591             _CHECK_AND_WARN_PROBLEMATIC_LOCALE;
2592             goto needs_full_generality;
2593         }
2594     }
2595
2596     if (c < 256) {
2597         return _to_fold_latin1((U8) c, p, lenp,
2598                             flags & (FOLD_FLAGS_FULL | FOLD_FLAGS_NOMIX_ASCII));
2599     }
2600
2601     /* Here, above 255.  If no special needs, just use the macro */
2602     if ( ! (flags & (FOLD_FLAGS_LOCALE|FOLD_FLAGS_NOMIX_ASCII))) {
2603         uvchr_to_utf8(p, c);
2604         return CALL_FOLD_CASE(c, p, p, lenp, flags & FOLD_FLAGS_FULL);
2605     }
2606     else {  /* Otherwise, _toFOLD_utf8_flags has the intelligence to deal with
2607                the special flags. */
2608         U8 utf8_c[UTF8_MAXBYTES + 1];
2609
2610       needs_full_generality:
2611         uvchr_to_utf8(utf8_c, c);
2612         return _toFOLD_utf8_flags(utf8_c, utf8_c + sizeof(utf8_c),
2613                                   p, lenp, flags);
2614     }
2615 }
2616
2617 PERL_STATIC_INLINE bool
2618 S_is_utf8_common(pTHX_ const U8 *const p, SV **swash,
2619                  const char *const swashname, SV* const invlist)
2620 {
2621     /* returns a boolean giving whether or not the UTF8-encoded character that
2622      * starts at <p> is in the swash indicated by <swashname>.  <swash>
2623      * contains a pointer to where the swash indicated by <swashname>
2624      * is to be stored; which this routine will do, so that future calls will
2625      * look at <*swash> and only generate a swash if it is not null.  <invlist>
2626      * is NULL or an inversion list that defines the swash.  If not null, it
2627      * saves time during initialization of the swash.
2628      *
2629      * Note that it is assumed that the buffer length of <p> is enough to
2630      * contain all the bytes that comprise the character.  Thus, <*p> should
2631      * have been checked before this call for mal-formedness enough to assure
2632      * that. */
2633
2634     PERL_ARGS_ASSERT_IS_UTF8_COMMON;
2635
2636     /* The API should have included a length for the UTF-8 character in <p>,
2637      * but it doesn't.  We therefore assume that p has been validated at least
2638      * as far as there being enough bytes available in it to accommodate the
2639      * character without reading beyond the end, and pass that number on to the
2640      * validating routine */
2641     if (! isUTF8_CHAR(p, p + UTF8SKIP(p))) {
2642         _force_out_malformed_utf8_message(p, p + UTF8SKIP(p),
2643                                           _UTF8_NO_CONFIDENCE_IN_CURLEN,
2644                                           1 /* Die */ );
2645         NOT_REACHED; /* NOTREACHED */
2646     }
2647
2648     if (!*swash) {
2649         U8 flags = _CORE_SWASH_INIT_ACCEPT_INVLIST;
2650         *swash = _core_swash_init("utf8",
2651
2652                                   /* Only use the name if there is no inversion
2653                                    * list; otherwise will go out to disk */
2654                                   (invlist) ? "" : swashname,
2655
2656                                   &PL_sv_undef, 1, 0, invlist, &flags);
2657     }
2658
2659     return swash_fetch(*swash, p, TRUE) != 0;
2660 }
2661
2662 PERL_STATIC_INLINE bool
2663 S_is_utf8_common_with_len(pTHX_ const U8 *const p, const U8 * const e,
2664                           SV **swash, const char *const swashname,
2665                           SV* const invlist)
2666 {
2667     /* returns a boolean giving whether or not the UTF8-encoded character that
2668      * starts at <p>, and extending no further than <e - 1> is in the swash
2669      * indicated by <swashname>.  <swash> contains a pointer to where the swash
2670      * indicated by <swashname> is to be stored; which this routine will do, so
2671      * that future calls will look at <*swash> and only generate a swash if it
2672      * is not null.  <invlist> is NULL or an inversion list that defines the
2673      * swash.  If not null, it saves time during initialization of the swash.
2674      */
2675
2676     PERL_ARGS_ASSERT_IS_UTF8_COMMON_WITH_LEN;
2677
2678     if (! isUTF8_CHAR(p, e)) {
2679         _force_out_malformed_utf8_message(p, e, 0, 1);
2680         NOT_REACHED; /* NOTREACHED */
2681     }
2682
2683     if (!*swash) {
2684         U8 flags = _CORE_SWASH_INIT_ACCEPT_INVLIST;
2685         *swash = _core_swash_init("utf8",
2686
2687                                   /* Only use the name if there is no inversion
2688                                    * list; otherwise will go out to disk */
2689                                   (invlist) ? "" : swashname,
2690
2691                                   &PL_sv_undef, 1, 0, invlist, &flags);
2692     }
2693
2694     return swash_fetch(*swash, p, TRUE) != 0;
2695 }
2696
2697 STATIC void
2698 S_warn_on_first_deprecated_use(pTHX_ const char * const name,
2699                                      const char * const alternative,
2700                                      const bool use_locale,
2701                                      const char * const file,
2702                                      const unsigned line)
2703 {
2704     const char * key;
2705
2706     PERL_ARGS_ASSERT_WARN_ON_FIRST_DEPRECATED_USE;
2707
2708     if (ckWARN_d(WARN_DEPRECATED)) {
2709
2710         key = Perl_form(aTHX_ "%s;%d;%s;%d", name, use_locale, file, line);
2711         if (! hv_fetch(PL_seen_deprecated_macro, key, strlen(key), 0)) {
2712             if (! PL_seen_deprecated_macro) {
2713                 PL_seen_deprecated_macro = newHV();
2714             }
2715             if (! hv_store(PL_seen_deprecated_macro, key,
2716                            strlen(key), &PL_sv_undef, 0))
2717             {
2718                 Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
2719             }
2720
2721             if (instr(file, "mathoms.c")) {
2722                 Perl_warner(aTHX_ WARN_DEPRECATED,
2723                             "In %s, line %d, starting in Perl v5.30, %s()"
2724                             " will be removed.  Avoid this message by"
2725                             " converting to use %s().\n",
2726                             file, line, name, alternative);
2727             }
2728             else {
2729                 Perl_warner(aTHX_ WARN_DEPRECATED,
2730                             "In %s, line %d, starting in Perl v5.30, %s() will"
2731                             " require an additional parameter.  Avoid this"
2732                             " message by converting to use %s().\n",
2733                             file, line, name, alternative);
2734             }
2735         }
2736     }
2737 }
2738
2739 bool
2740 Perl__is_utf8_FOO(pTHX_       U8   classnum,
2741                         const U8   * const p,
2742                         const char * const name,
2743                         const char * const alternative,
2744                         const bool use_utf8,
2745                         const bool use_locale,
2746                         const char * const file,
2747                         const unsigned line)
2748 {
2749     PERL_ARGS_ASSERT__IS_UTF8_FOO;
2750
2751     warn_on_first_deprecated_use(name, alternative, use_locale, file, line);
2752
2753     if (use_utf8 && UTF8_IS_ABOVE_LATIN1(*p)) {
2754
2755         switch (classnum) {
2756             case _CC_WORDCHAR:
2757             case _CC_DIGIT:
2758             case _CC_ALPHA:
2759             case _CC_LOWER:
2760             case _CC_UPPER:
2761             case _CC_PUNCT:
2762             case _CC_PRINT:
2763             case _CC_ALPHANUMERIC:
2764             case _CC_GRAPH:
2765             case _CC_CASED:
2766
2767                 return is_utf8_common(p,
2768                                       &PL_utf8_swash_ptrs[classnum],
2769                                       swash_property_names[classnum],
2770                                       PL_XPosix_ptrs[classnum]);
2771
2772             case _CC_SPACE:
2773                 return is_XPERLSPACE_high(p);
2774             case _CC_BLANK:
2775                 return is_HORIZWS_high(p);
2776             case _CC_XDIGIT:
2777                 return is_XDIGIT_high(p);
2778             case _CC_CNTRL:
2779                 return 0;
2780             case _CC_ASCII:
2781                 return 0;
2782             case _CC_VERTSPACE:
2783                 return is_VERTWS_high(p);
2784             case _CC_IDFIRST:
2785                 if (! PL_utf8_perl_idstart) {
2786                     PL_utf8_perl_idstart
2787                                 = _new_invlist_C_array(_Perl_IDStart_invlist);
2788                 }
2789                 return is_utf8_common(p, &PL_utf8_perl_idstart,
2790                                       "_Perl_IDStart", NULL);
2791             case _CC_IDCONT:
2792                 if (! PL_utf8_perl_idcont) {
2793                     PL_utf8_perl_idcont
2794                                 = _new_invlist_C_array(_Perl_IDCont_invlist);
2795                 }
2796                 return is_utf8_common(p, &PL_utf8_perl_idcont,
2797                                       "_Perl_IDCont", NULL);
2798         }
2799     }
2800
2801     /* idcont is the same as wordchar below 256 */
2802     if (classnum == _CC_IDCONT) {
2803         classnum = _CC_WORDCHAR;
2804     }
2805     else if (classnum == _CC_IDFIRST) {
2806         if (*p == '_') {
2807             return TRUE;
2808         }
2809         classnum = _CC_ALPHA;
2810     }
2811
2812     if (! use_locale) {
2813         if (! use_utf8 || UTF8_IS_INVARIANT(*p)) {
2814             return _generic_isCC(*p, classnum);
2815         }
2816
2817         return _generic_isCC(EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p + 1 )), classnum);
2818     }
2819     else {
2820         if (! use_utf8 || UTF8_IS_INVARIANT(*p)) {
2821             return isFOO_lc(classnum, *p);
2822         }
2823
2824         return isFOO_lc(classnum, EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p + 1 )));
2825     }
2826
2827     NOT_REACHED; /* NOTREACHED */
2828 }
2829
2830 bool
2831 Perl__is_utf8_FOO_with_len(pTHX_ const U8 classnum, const U8 *p,
2832                                                             const U8 * const e)
2833 {
2834     PERL_ARGS_ASSERT__IS_UTF8_FOO_WITH_LEN;
2835
2836     assert(classnum < _FIRST_NON_SWASH_CC);
2837
2838     return is_utf8_common_with_len(p,
2839                                    e,
2840                                    &PL_utf8_swash_ptrs[classnum],
2841                                    swash_property_names[classnum],
2842                                    PL_XPosix_ptrs[classnum]);
2843 }
2844
2845 bool
2846 Perl__is_utf8_perl_idstart_with_len(pTHX_ const U8 *p, const U8 * const e)
2847 {
2848     SV* invlist = NULL;
2849
2850     PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART_WITH_LEN;
2851
2852     if (! PL_utf8_perl_idstart) {
2853         invlist = _new_invlist_C_array(_Perl_IDStart_invlist);
2854     }
2855     return is_utf8_common_with_len(p, e, &PL_utf8_perl_idstart,
2856                                       "_Perl_IDStart", invlist);
2857 }
2858
2859 bool
2860 Perl__is_utf8_xidstart(pTHX_ const U8 *p)
2861 {
2862     PERL_ARGS_ASSERT__IS_UTF8_XIDSTART;
2863
2864     if (*p == '_')
2865         return TRUE;
2866     return is_utf8_common(p, &PL_utf8_xidstart, "XIdStart", NULL);
2867 }
2868
2869 bool
2870 Perl__is_utf8_perl_idcont_with_len(pTHX_ const U8 *p, const U8 * const e)
2871 {
2872     SV* invlist = NULL;
2873
2874     PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT_WITH_LEN;
2875
2876     if (! PL_utf8_perl_idcont) {
2877         invlist = _new_invlist_C_array(_Perl_IDCont_invlist);
2878     }
2879     return is_utf8_common_with_len(p, e, &PL_utf8_perl_idcont,
2880                                    "_Perl_IDCont", invlist);
2881 }
2882
2883 bool
2884 Perl__is_utf8_idcont(pTHX_ const U8 *p)
2885 {
2886     PERL_ARGS_ASSERT__IS_UTF8_IDCONT;
2887
2888     return is_utf8_common(p, &PL_utf8_idcont, "IdContinue", NULL);
2889 }
2890
2891 bool
2892 Perl__is_utf8_xidcont(pTHX_ const U8 *p)
2893 {
2894     PERL_ARGS_ASSERT__IS_UTF8_XIDCONT;
2895
2896     return is_utf8_common(p, &PL_utf8_idcont, "XIdContinue", NULL);
2897 }
2898
2899 bool
2900 Perl__is_utf8_mark(pTHX_ const U8 *p)
2901 {
2902     PERL_ARGS_ASSERT__IS_UTF8_MARK;
2903
2904     return is_utf8_common(p, &PL_utf8_mark, "IsM", NULL);
2905 }
2906
2907     /* change namve uv1 to 'from' */
2908 STATIC UV
2909 S__to_utf8_case(pTHX_ const UV uv1, const U8 *p, U8* ustrp, STRLEN *lenp,
2910                 SV **swashp, const char *normal, const char *special)
2911 {
2912     STRLEN len = 0;
2913
2914     PERL_ARGS_ASSERT__TO_UTF8_CASE;
2915
2916     /* For code points that don't change case, we already know that the output
2917      * of this function is the unchanged input, so we can skip doing look-ups
2918      * for them.  Unfortunately the case-changing code points are scattered
2919      * around.  But there are some long consecutive ranges where there are no
2920      * case changing code points.  By adding tests, we can eliminate the lookup
2921      * for all the ones in such ranges.  This is currently done here only for
2922      * just a few cases where the scripts are in common use in modern commerce
2923      * (and scripts adjacent to those which can be included without additional
2924      * tests). */
2925
2926     if (uv1 >= 0x0590) {
2927         /* This keeps from needing further processing the code points most
2928          * likely to be used in the following non-cased scripts: Hebrew,
2929          * Arabic, Syriac, Thaana, NKo, Samaritan, Mandaic, Devanagari,
2930          * Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada,
2931          * Malayalam, Sinhala, Thai, Lao, Tibetan, Myanmar */
2932         if (uv1 < 0x10A0) {
2933             goto cases_to_self;
2934         }
2935
2936         /* The following largish code point ranges also don't have case
2937          * changes, but khw didn't think they warranted extra tests to speed
2938          * them up (which would slightly slow down everything else above them):
2939          * 1100..139F   Hangul Jamo, Ethiopic
2940          * 1400..1CFF   Unified Canadian Aboriginal Syllabics, Ogham, Runic,
2941          *              Tagalog, Hanunoo, Buhid, Tagbanwa, Khmer, Mongolian,
2942          *              Limbu, Tai Le, New Tai Lue, Buginese, Tai Tham,
2943          *              Combining Diacritical Marks Extended, Balinese,
2944          *              Sundanese, Batak, Lepcha, Ol Chiki
2945          * 2000..206F   General Punctuation
2946          */
2947
2948         if (uv1 >= 0x2D30) {
2949
2950             /* This keeps the from needing further processing the code points
2951              * most likely to be used in the following non-cased major scripts:
2952              * CJK, Katakana, Hiragana, plus some less-likely scripts.
2953              *
2954              * (0x2D30 above might have to be changed to 2F00 in the unlikely
2955              * event that Unicode eventually allocates the unused block as of
2956              * v8.0 2FE0..2FEF to code points that are cased.  khw has verified
2957              * that the test suite will start having failures to alert you
2958              * should that happen) */
2959             if (uv1 < 0xA640) {
2960                 goto cases_to_self;
2961             }
2962
2963             if (uv1 >= 0xAC00) {
2964                 if (UNLIKELY(UNICODE_IS_SURROGATE(uv1))) {
2965                     if (ckWARN_d(WARN_SURROGATE)) {
2966                         const char* desc = (PL_op) ? OP_DESC(PL_op) : normal;
2967                         Perl_warner(aTHX_ packWARN(WARN_SURROGATE),
2968                             "Operation \"%s\" returns its argument for"
2969                             " UTF-16 surrogate U+%04" UVXf, desc, uv1);
2970                     }
2971                     goto cases_to_self;
2972                 }
2973
2974                 /* AC00..FAFF Catches Hangul syllables and private use, plus
2975                  * some others */
2976                 if (uv1 < 0xFB00) {
2977                     goto cases_to_self;
2978
2979                 }
2980
2981                 if (UNLIKELY(UNICODE_IS_SUPER(uv1))) {
2982                     if (   UNLIKELY(uv1 > MAX_NON_DEPRECATED_CP)
2983                         && ckWARN_d(WARN_DEPRECATED))
2984                     {
2985                         Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
2986                                 cp_above_legal_max, uv1, MAX_NON_DEPRECATED_CP);
2987                     }
2988                     if (ckWARN_d(WARN_NON_UNICODE)) {
2989                         const char* desc = (PL_op) ? OP_DESC(PL_op) : normal;
2990                         Perl_warner(aTHX_ packWARN(WARN_NON_UNICODE),
2991                             "Operation \"%s\" returns its argument for"
2992                             " non-Unicode code point 0x%04" UVXf, desc, uv1);
2993                     }
2994                     goto cases_to_self;
2995                 }
2996 #ifdef HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C
2997                 if (UNLIKELY(uv1
2998                     > HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C))
2999                 {
3000
3001                     /* As of Unicode 10.0, this means we avoid swash creation
3002                      * for anything beyond high Plane 1 (below emojis)  */
3003                     goto cases_to_self;
3004                 }
3005 #endif
3006             }
3007         }
3008
3009         /* Note that non-characters are perfectly legal, so no warning should
3010          * be given.  There are so few of them, that it isn't worth the extra
3011          * tests to avoid swash creation */
3012     }
3013
3014     if (!*swashp) /* load on-demand */
3015          *swashp = _core_swash_init("utf8", normal, &PL_sv_undef,
3016                                     4, 0, NULL, NULL);
3017
3018     if (special) {
3019          /* It might be "special" (sometimes, but not always,
3020           * a multicharacter mapping) */
3021          HV *hv = NULL;
3022          SV **svp;
3023
3024          /* If passed in the specials name, use that; otherwise use any
3025           * given in the swash */
3026          if (*special != '\0') {
3027             hv = get_hv(special, 0);
3028         }
3029         else {
3030             svp = hv_fetchs(MUTABLE_HV(SvRV(*swashp)), "SPECIALS", 0);
3031             if (svp) {
3032                 hv = MUTABLE_HV(SvRV(*svp));
3033             }
3034         }
3035
3036          if (hv
3037              && (svp = hv_fetch(hv, (const char*)p, UVCHR_SKIP(uv1), FALSE))
3038              && (*svp))
3039          {
3040              const char *s;
3041
3042               s = SvPV_const(*svp, len);
3043               if (len == 1)
3044                   /* EIGHTBIT */
3045                    len = uvchr_to_utf8(ustrp, *(U8*)s) - ustrp;
3046               else {
3047                    Copy(s, ustrp, len, U8);
3048               }
3049          }
3050     }
3051
3052     if (!len && *swashp) {
3053         const UV uv2 = swash_fetch(*swashp, p, TRUE /* => is UTF-8 */);
3054
3055          if (uv2) {
3056               /* It was "normal" (a single character mapping). */
3057               len = uvchr_to_utf8(ustrp, uv2) - ustrp;
3058          }
3059     }
3060
3061     if (len) {
3062         if (lenp) {
3063             *lenp = len;
3064         }
3065         return valid_utf8_to_uvchr(ustrp, 0);
3066     }
3067
3068     /* Here, there was no mapping defined, which means that the code point maps
3069      * to itself.  Return the inputs */
3070   cases_to_self:
3071     len = UTF8SKIP(p);
3072     if (p != ustrp) {   /* Don't copy onto itself */
3073         Copy(p, ustrp, len, U8);
3074     }
3075
3076     if (lenp)
3077          *lenp = len;
3078
3079     return uv1;
3080
3081 }
3082
3083 STATIC UV
3084 S_check_locale_boundary_crossing(pTHX_ const U8* const p, const UV result,
3085                                        U8* const ustrp, STRLEN *lenp)
3086 {
3087     /* This is called when changing the case of a UTF-8-encoded character above
3088      * the Latin1 range, and the operation is in a non-UTF-8 locale.  If the
3089      * result contains a character that crosses the 255/256 boundary, disallow
3090      * the change, and return the original code point.  See L<perlfunc/lc> for
3091      * why;
3092      *
3093      * p        points to the original string whose case was changed; assumed
3094      *          by this routine to be well-formed
3095      * result   the code point of the first character in the changed-case string
3096      * ustrp    points to the changed-case string (<result> represents its
3097      *          first char)
3098      * lenp     points to the length of <ustrp> */
3099
3100     UV original;    /* To store the first code point of <p> */
3101
3102     PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING;
3103
3104     assert(UTF8_IS_ABOVE_LATIN1(*p));
3105
3106     /* We know immediately if the first character in the string crosses the
3107      * boundary, so can skip */
3108     if (result > 255) {
3109
3110         /* Look at every character in the result; if any cross the
3111         * boundary, the whole thing is disallowed */
3112         U8* s = ustrp + UTF8SKIP(ustrp);
3113         U8* e = ustrp + *lenp;
3114         while (s < e) {
3115             if (! UTF8_IS_ABOVE_LATIN1(*s)) {
3116                 goto bad_crossing;
3117             }
3118             s += UTF8SKIP(s);
3119         }
3120
3121         /* Here, no characters crossed, result is ok as-is, but we warn. */
3122         _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(p, p + UTF8SKIP(p));
3123         return result;
3124     }
3125
3126   bad_crossing:
3127
3128     /* Failed, have to return the original */
3129     original = valid_utf8_to_uvchr(p, lenp);
3130
3131     /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3132     Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3133                            "Can't do %s(\"\\x{%" UVXf "}\") on non-UTF-8"
3134                            " locale; resolved to \"\\x{%" UVXf "}\".",
3135                            OP_DESC(PL_op),
3136                            original,
3137                            original);
3138     Copy(p, ustrp, *lenp, char);
3139     return original;
3140 }
3141
3142 STATIC U32
3143 S_check_and_deprecate(pTHX_ const U8 *p,
3144                             const U8 **e,
3145                             const unsigned int type,    /* See below */
3146                             const bool use_locale,      /* Is this a 'LC_'
3147                                                            macro call? */
3148                             const char * const file,
3149                             const unsigned line)
3150 {
3151     /* This is a temporary function to deprecate the unsafe calls to the case
3152      * changing macros and functions.  It keeps all the special stuff in just
3153      * one place.
3154      *
3155      * It updates *e with the pointer to the end of the input string.  If using
3156      * the old-style macros, *e is NULL on input, and so this function assumes
3157      * the input string is long enough to hold the entire UTF-8 sequence, and
3158      * sets *e accordingly, but it then returns a flag to pass the
3159      * utf8n_to_uvchr(), to tell it that this size is a guess, and to avoid
3160      * using the full length if possible.
3161      *
3162      * It also does the assert that *e > p when *e is not NULL.  This should be
3163      * migrated to the callers when this function gets deleted.
3164      *
3165      * The 'type' parameter is used for the caller to specify which case
3166      * changing function this is called from: */
3167
3168 #       define DEPRECATE_TO_UPPER 0
3169 #       define DEPRECATE_TO_TITLE 1
3170 #       define DEPRECATE_TO_LOWER 2
3171 #       define DEPRECATE_TO_FOLD  3
3172
3173     U32 utf8n_flags = 0;
3174     const char * name;
3175     const char * alternative;
3176
3177     PERL_ARGS_ASSERT_CHECK_AND_DEPRECATE;
3178
3179     if (*e == NULL) {
3180         utf8n_flags = _UTF8_NO_CONFIDENCE_IN_CURLEN;
3181         *e = p + UTF8SKIP(p);
3182
3183         /* For mathoms.c calls, we use the function name we know is stored
3184          * there.  It could be part of a larger path */
3185         if (type == DEPRECATE_TO_UPPER) {
3186             name = instr(file, "mathoms.c")
3187                    ? "to_utf8_upper"
3188                    : "toUPPER_utf8";
3189             alternative = "toUPPER_utf8_safe";
3190         }
3191         else if (type == DEPRECATE_TO_TITLE) {
3192             name = instr(file, "mathoms.c")
3193                    ? "to_utf8_title"
3194                    : "toTITLE_utf8";
3195             alternative = "toTITLE_utf8_safe";
3196         }
3197         else if (type == DEPRECATE_TO_LOWER) {
3198             name = instr(file, "mathoms.c")
3199                    ? "to_utf8_lower"
3200                    : "toLOWER_utf8";
3201             alternative = "toLOWER_utf8_safe";
3202         }
3203         else if (type == DEPRECATE_TO_FOLD) {
3204             name = instr(file, "mathoms.c")
3205                    ? "to_utf8_fold"
3206                    : "toFOLD_utf8";
3207             alternative = "toFOLD_utf8_safe";
3208         }
3209         else Perl_croak(aTHX_ "panic: Unexpected case change type");
3210
3211         warn_on_first_deprecated_use(name, alternative, use_locale, file, line);
3212     }
3213     else {
3214         assert (p < *e);
3215     }
3216
3217     return utf8n_flags;
3218 }
3219
3220 /* The process for changing the case is essentially the same for the four case
3221  * change types, except there are complications for folding.  Otherwise the
3222  * difference is only which case to change to.  To make sure that they all do
3223  * the same thing, the bodies of the functions are extracted out into the
3224  * following two macros.  The functions are written with the same variable
3225  * names, and these are known and used inside these macros.  It would be
3226  * better, of course, to have inline functions to do it, but since different
3227  * macros are called, depending on which case is being changed to, this is not
3228  * feasible in C (to khw's knowledge).  Two macros are created so that the fold
3229  * function can start with the common start macro, then finish with its special
3230  * handling; while the other three cases can just use the common end macro.
3231  *
3232  * The algorithm is to use the proper (passed in) macro or function to change
3233  * the case for code points that are below 256.  The macro is used if using
3234  * locale rules for the case change; the function if not.  If the code point is
3235  * above 255, it is computed from the input UTF-8, and another macro is called
3236  * to do the conversion.  If necessary, the output is converted to UTF-8.  If
3237  * using a locale, we have to check that the change did not cross the 255/256
3238  * boundary, see check_locale_boundary_crossing() for further details.
3239  *
3240  * The macros are split with the correct case change for the below-256 case
3241  * stored into 'result', and in the middle of an else clause for the above-255
3242  * case.  At that point in the 'else', 'result' is not the final result, but is
3243  * the input code point calculated from the UTF-8.  The fold code needs to
3244  * realize all this and take it from there.
3245  *
3246  * If you read the two macros as sequential, it's easier to understand what's
3247  * going on. */
3248 #define CASE_CHANGE_BODY_START(locale_flags, LC_L1_change_macro, L1_func,    \
3249                                L1_func_extra_param)                          \
3250                                                                              \
3251     if (flags & (locale_flags)) {                                            \
3252         /* Treat a UTF-8 locale as not being in locale at all */             \
3253         if (IN_UTF8_CTYPE_LOCALE) {                                          \
3254             flags &= ~(locale_flags);                                        \
3255         }                                                                    \
3256         else {                                                               \
3257             _CHECK_AND_WARN_PROBLEMATIC_LOCALE;                              \
3258         }                                                                    \
3259     }                                                                        \
3260                                                                              \
3261     if (UTF8_IS_INVARIANT(*p)) {                                             \
3262         if (flags & (locale_flags)) {                                        \
3263             result = LC_L1_change_macro(*p);                                 \
3264         }                                                                    \
3265         else {                                                               \
3266             return L1_func(*p, ustrp, lenp, L1_func_extra_param);            \
3267         }                                                                    \
3268     }                                                                        \
3269     else if UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(p, e) {                          \
3270         if (flags & (locale_flags)) {                                        \
3271             result = LC_L1_change_macro(EIGHT_BIT_UTF8_TO_NATIVE(*p,         \
3272                                                                  *(p+1)));   \
3273         }                                                                    \
3274         else {                                                               \
3275             return L1_func(EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p+1)),             \
3276                            ustrp, lenp,  L1_func_extra_param);               \
3277         }                                                                    \
3278     }                                                                        \
3279     else {  /* malformed UTF-8 or ord above 255 */                           \
3280         STRLEN len_result;                                                   \
3281         result = utf8n_to_uvchr(p, e - p, &len_result, UTF8_CHECK_ONLY);     \
3282         if (len_result == (STRLEN) -1) {                                     \
3283             _force_out_malformed_utf8_message(p, e, utf8n_flags,             \
3284                                                             1 /* Die */ );   \
3285         }
3286
3287 #define CASE_CHANGE_BODY_END(locale_flags, change_macro)                     \
3288         result = change_macro(result, p, ustrp, lenp);                       \
3289                                                                              \
3290         if (flags & (locale_flags)) {                                        \
3291             result = check_locale_boundary_crossing(p, result, ustrp, lenp); \
3292         }                                                                    \
3293         return result;                                                       \
3294     }                                                                        \
3295                                                                              \
3296     /* Here, used locale rules.  Convert back to UTF-8 */                    \
3297     if (UTF8_IS_INVARIANT(result)) {                                         \
3298         *ustrp = (U8) result;                                                \
3299         *lenp = 1;                                                           \
3300     }                                                                        \
3301     else {                                                                   \
3302         *ustrp = UTF8_EIGHT_BIT_HI((U8) result);                             \
3303         *(ustrp + 1) = UTF8_EIGHT_BIT_LO((U8) result);                       \
3304         *lenp = 2;                                                           \
3305     }                                                                        \
3306                                                                              \
3307     return result;
3308
3309 /*
3310 =for apidoc to_utf8_upper
3311
3312 Instead use L</toUPPER_utf8_safe>.
3313
3314 =cut */
3315
3316 /* Not currently externally documented, and subject to change:
3317  * <flags> is set iff iff the rules from the current underlying locale are to
3318  *         be used. */
3319
3320 UV
3321 Perl__to_utf8_upper_flags(pTHX_ const U8 *p,
3322                                 const U8 *e,
3323                                 U8* ustrp,
3324                                 STRLEN *lenp,
3325                                 bool flags,
3326                                 const char * const file,
3327                                 const int line)
3328 {
3329     UV result;
3330     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_UPPER,
3331                                                 cBOOL(flags), file, line);
3332
3333     PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS;
3334
3335     /* ~0 makes anything non-zero in 'flags' mean we are using locale rules */
3336     /* 2nd char of uc(U+DF) is 'S' */
3337     CASE_CHANGE_BODY_START(~0, toUPPER_LC, _to_upper_title_latin1, 'S');
3338     CASE_CHANGE_BODY_END  (~0, CALL_UPPER_CASE);
3339 }
3340
3341 /*
3342 =for apidoc to_utf8_title
3343
3344 Instead use L</toTITLE_utf8_safe>.
3345
3346 =cut */
3347
3348 /* Not currently externally documented, and subject to change:
3349  * <flags> is set iff the rules from the current underlying locale are to be
3350  *         used.  Since titlecase is not defined in POSIX, for other than a
3351  *         UTF-8 locale, uppercase is used instead for code points < 256.
3352  */
3353
3354 UV
3355 Perl__to_utf8_title_flags(pTHX_ const U8 *p,
3356                                 const U8 *e,
3357                                 U8* ustrp,
3358                                 STRLEN *lenp,
3359                                 bool flags,
3360                                 const char * const file,
3361                                 const int line)
3362 {
3363     UV result;
3364     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_TITLE,
3365                                                 cBOOL(flags), file, line);
3366
3367     PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS;
3368
3369     /* 2nd char of ucfirst(U+DF) is 's' */
3370     CASE_CHANGE_BODY_START(~0, toUPPER_LC, _to_upper_title_latin1, 's');
3371     CASE_CHANGE_BODY_END  (~0, CALL_TITLE_CASE);
3372 }
3373
3374 /*
3375 =for apidoc to_utf8_lower
3376
3377 Instead use L</toLOWER_utf8_safe>.
3378
3379 =cut */
3380
3381 /* Not currently externally documented, and subject to change:
3382  * <flags> is set iff iff the rules from the current underlying locale are to
3383  *         be used.
3384  */
3385
3386 UV
3387 Perl__to_utf8_lower_flags(pTHX_ const U8 *p,
3388                                 const U8 *e,
3389                                 U8* ustrp,
3390                                 STRLEN *lenp,
3391                                 bool flags,
3392                                 const char * const file,
3393                                 const int line)
3394 {
3395     UV result;
3396     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_LOWER,
3397                                                 cBOOL(flags), file, line);
3398
3399     PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS;
3400
3401     CASE_CHANGE_BODY_START(~0, toLOWER_LC, to_lower_latin1, 0 /* 0 is dummy */)
3402     CASE_CHANGE_BODY_END  (~0, CALL_LOWER_CASE)
3403 }
3404
3405 /*
3406 =for apidoc to_utf8_fold
3407
3408 Instead use L</toFOLD_utf8_safe>.
3409
3410 =cut */
3411
3412 /* Not currently externally documented, and subject to change,
3413  * in <flags>
3414  *      bit FOLD_FLAGS_LOCALE is set iff the rules from the current underlying
3415  *                            locale are to be used.
3416  *      bit FOLD_FLAGS_FULL   is set iff full case folds are to be used;
3417  *                            otherwise simple folds
3418  *      bit FOLD_FLAGS_NOMIX_ASCII is set iff folds of non-ASCII to ASCII are
3419  *                            prohibited
3420  */
3421
3422 UV
3423 Perl__to_utf8_fold_flags(pTHX_ const U8 *p,
3424                                const U8 *e,
3425                                U8* ustrp,
3426                                STRLEN *lenp,
3427                                U8 flags,
3428                                const char * const file,
3429                                const int line)
3430 {
3431     UV result;
3432     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_FOLD,
3433                                                 cBOOL(flags), file, line);
3434
3435     PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS;
3436
3437     /* These are mutually exclusive */
3438     assert (! ((flags & FOLD_FLAGS_LOCALE) && (flags & FOLD_FLAGS_NOMIX_ASCII)));
3439
3440     assert(p != ustrp); /* Otherwise overwrites */
3441
3442     CASE_CHANGE_BODY_START(FOLD_FLAGS_LOCALE, toFOLD_LC, _to_fold_latin1,
3443                  ((flags) & (FOLD_FLAGS_FULL | FOLD_FLAGS_NOMIX_ASCII)));
3444
3445         result = CALL_FOLD_CASE(result, p, ustrp, lenp, flags & FOLD_FLAGS_FULL);
3446
3447         if (flags & FOLD_FLAGS_LOCALE) {
3448
3449 #           define LONG_S_T      LATIN_SMALL_LIGATURE_LONG_S_T_UTF8
3450             const unsigned int long_s_t_len    = sizeof(LONG_S_T) - 1;
3451
3452 #         ifdef LATIN_CAPITAL_LETTER_SHARP_S_UTF8
3453 #           define CAP_SHARP_S   LATIN_CAPITAL_LETTER_SHARP_S_UTF8
3454
3455             const unsigned int cap_sharp_s_len = sizeof(CAP_SHARP_S) - 1;
3456
3457             /* Special case these two characters, as what normally gets
3458              * returned under locale doesn't work */
3459             if (UTF8SKIP(p) == cap_sharp_s_len
3460                 && memEQ((char *) p, CAP_SHARP_S, cap_sharp_s_len))
3461             {
3462                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3463                 Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3464                               "Can't do fc(\"\\x{1E9E}\") on non-UTF-8 locale; "
3465                               "resolved to \"\\x{17F}\\x{17F}\".");
3466                 goto return_long_s;
3467             }
3468             else
3469 #endif
3470                  if (UTF8SKIP(p) == long_s_t_len
3471                      && memEQ((char *) p, LONG_S_T, long_s_t_len))
3472             {
3473                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3474                 Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3475                               "Can't do fc(\"\\x{FB05}\") on non-UTF-8 locale; "
3476                               "resolved to \"\\x{FB06}\".");
3477                 goto return_ligature_st;
3478             }
3479
3480 #if    UNICODE_MAJOR_VERSION   == 3         \
3481     && UNICODE_DOT_VERSION     == 0         \
3482     && UNICODE_DOT_DOT_VERSION == 1
3483 #           define DOTTED_I   LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_UTF8
3484
3485             /* And special case this on this Unicode version only, for the same
3486              * reaons the other two are special cased.  They would cross the
3487              * 255/256 boundary which is forbidden under /l, and so the code
3488              * wouldn't catch that they are equivalent (which they are only in
3489              * this release) */
3490             else if (UTF8SKIP(p) == sizeof(DOTTED_I) - 1
3491                      && memEQ((char *) p, DOTTED_I, sizeof(DOTTED_I) - 1))
3492             {
3493                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3494                 Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3495                               "Can't do fc(\"\\x{0130}\") on non-UTF-8 locale; "
3496                               "resolved to \"\\x{0131}\".");
3497                 goto return_dotless_i;
3498             }
3499 #endif
3500
3501             return check_locale_boundary_crossing(p, result, ustrp, lenp);
3502         }
3503         else if (! (flags & FOLD_FLAGS_NOMIX_ASCII)) {
3504             return result;
3505         }
3506         else {
3507             /* This is called when changing the case of a UTF-8-encoded
3508              * character above the ASCII range, and the result should not
3509              * contain an ASCII character. */
3510
3511             UV original;    /* To store the first code point of <p> */
3512
3513             /* Look at every character in the result; if any cross the
3514             * boundary, the whole thing is disallowed */
3515             U8* s = ustrp;
3516             U8* e = ustrp + *lenp;
3517             while (s < e) {
3518                 if (isASCII(*s)) {
3519                     /* Crossed, have to return the original */
3520                     original = valid_utf8_to_uvchr(p, lenp);
3521
3522                     /* But in these instances, there is an alternative we can
3523                      * return that is valid */
3524                     if (original == LATIN_SMALL_LETTER_SHARP_S
3525 #ifdef LATIN_CAPITAL_LETTER_SHARP_S /* not defined in early Unicode releases */
3526                         || original == LATIN_CAPITAL_LETTER_SHARP_S
3527 #endif
3528                     ) {
3529                         goto return_long_s;
3530                     }
3531                     else if (original == LATIN_SMALL_LIGATURE_LONG_S_T) {
3532                         goto return_ligature_st;
3533                     }
3534 #if    UNICODE_MAJOR_VERSION   == 3         \
3535     && UNICODE_DOT_VERSION     == 0         \
3536     && UNICODE_DOT_DOT_VERSION == 1
3537
3538                     else if (original == LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE) {
3539                         goto return_dotless_i;
3540                     }
3541 #endif
3542                     Copy(p, ustrp, *lenp, char);
3543                     return original;
3544                 }
3545                 s += UTF8SKIP(s);
3546             }
3547
3548             /* Here, no characters crossed, result is ok as-is */
3549             return result;
3550         }
3551     }
3552
3553     /* Here, used locale rules.  Convert back to UTF-8 */
3554     if (UTF8_IS_INVARIANT(result)) {
3555         *ustrp = (U8) result;
3556         *lenp = 1;
3557     }
3558     else {
3559         *ustrp = UTF8_EIGHT_BIT_HI((U8) result);
3560         *(ustrp + 1) = UTF8_EIGHT_BIT_LO((U8) result);
3561         *lenp = 2;
3562     }
3563
3564     return result;
3565
3566   return_long_s:
3567     /* Certain folds to 'ss' are prohibited by the options, but they do allow
3568      * folds to a string of two of these characters.  By returning this
3569      * instead, then, e.g.,
3570      *      fc("\x{1E9E}") eq fc("\x{17F}\x{17F}")
3571      * works. */
3572
3573     *lenp = 2 * sizeof(LATIN_SMALL_LETTER_LONG_S_UTF8) - 2;
3574     Copy(LATIN_SMALL_LETTER_LONG_S_UTF8 LATIN_SMALL_LETTER_LONG_S_UTF8,
3575         ustrp, *lenp, U8);
3576     return LATIN_SMALL_LETTER_LONG_S;
3577
3578   return_ligature_st:
3579     /* Two folds to 'st' are prohibited by the options; instead we pick one and
3580      * have the other one fold to it */
3581
3582     *lenp = sizeof(LATIN_SMALL_LIGATURE_ST_UTF8) - 1;
3583     Copy(LATIN_SMALL_LIGATURE_ST_UTF8, ustrp, *lenp, U8);
3584     return LATIN_SMALL_LIGATURE_ST;
3585
3586 #if    UNICODE_MAJOR_VERSION   == 3         \
3587     && UNICODE_DOT_VERSION     == 0         \
3588     && UNICODE_DOT_DOT_VERSION == 1
3589
3590   return_dotless_i:
3591     *lenp = sizeof(LATIN_SMALL_LETTER_DOTLESS_I_UTF8) - 1;
3592     Copy(LATIN_SMALL_LETTER_DOTLESS_I_UTF8, ustrp, *lenp, U8);
3593     return LATIN_SMALL_LETTER_DOTLESS_I;
3594
3595 #endif
3596
3597 }
3598
3599 /* Note:
3600  * Returns a "swash" which is a hash described in utf8.c:Perl_swash_fetch().
3601  * C<pkg> is a pointer to a package name for SWASHNEW, should be "utf8".
3602  * For other parameters, see utf8::SWASHNEW in lib/utf8_heavy.pl.
3603  */
3604
3605 SV*
3606 Perl_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv,
3607                       I32 minbits, I32 none)
3608 {
3609     PERL_ARGS_ASSERT_SWASH_INIT;
3610
3611     /* Returns a copy of a swash initiated by the called function.  This is the
3612      * public interface, and returning a copy prevents others from doing
3613      * mischief on the original */
3614
3615     return newSVsv(_core_swash_init(pkg, name, listsv, minbits, none,
3616                                     NULL, NULL));
3617 }
3618
3619 SV*
3620 Perl__core_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv,
3621                             I32 minbits, I32 none, SV* invlist,
3622                             U8* const flags_p)
3623 {
3624
3625     /*NOTE NOTE NOTE - If you want to use "return" in this routine you MUST
3626      * use the following define */
3627
3628 #define CORE_SWASH_INIT_RETURN(x)   \
3629     PL_curpm= old_PL_curpm;         \
3630     return x
3631
3632     /* Initialize and return a swash, creating it if necessary.  It does this
3633      * by calling utf8_heavy.pl in the general case.  The returned value may be
3634      * the swash's inversion list instead if the input parameters allow it.
3635      * Which is returned should be immaterial to callers, as the only
3636      * operations permitted on a swash, swash_fetch(), _get_swash_invlist(),
3637      * and swash_to_invlist() handle both these transparently.
3638      *
3639      * This interface should only be used by functions that won't destroy or
3640      * adversely change the swash, as doing so affects all other uses of the
3641      * swash in the program; the general public should use 'Perl_swash_init'
3642      * instead.
3643      *
3644      * pkg  is the name of the package that <name> should be in.
3645      * name is the name of the swash to find.  Typically it is a Unicode
3646      *      property name, including user-defined ones
3647      * listsv is a string to initialize the swash with.  It must be of the form
3648      *      documented as the subroutine return value in
3649      *      L<perlunicode/User-Defined Character Properties>
3650      * minbits is the number of bits required to represent each data element.
3651      *      It is '1' for binary properties.
3652      * none I (khw) do not understand this one, but it is used only in tr///.
3653      * invlist is an inversion list to initialize the swash with (or NULL)
3654      * flags_p if non-NULL is the address of various input and output flag bits
3655      *      to the routine, as follows:  ('I' means is input to the routine;
3656      *      'O' means output from the routine.  Only flags marked O are
3657      *      meaningful on return.)
3658      *  _CORE_SWASH_INIT_USER_DEFINED_PROPERTY indicates if the swash
3659      *      came from a user-defined property.  (I O)
3660      *  _CORE_SWASH_INIT_RETURN_IF_UNDEF indicates that instead of croaking
3661      *      when the swash cannot be located, to simply return NULL. (I)
3662      *  _CORE_SWASH_INIT_ACCEPT_INVLIST indicates that the caller will accept a
3663      *      return of an inversion list instead of a swash hash if this routine
3664      *      thinks that would result in faster execution of swash_fetch() later
3665      *      on. (I)
3666      *
3667      * Thus there are three possible inputs to find the swash: <name>,
3668      * <listsv>, and <invlist>.  At least one must be specified.  The result
3669      * will be the union of the specified ones, although <listsv>'s various
3670      * actions can intersect, etc. what <name> gives.  To avoid going out to
3671      * disk at all, <invlist> should specify completely what the swash should
3672      * have, and <listsv> should be &PL_sv_undef and <name> should be "".
3673      *
3674      * <invlist> is only valid for binary properties */
3675
3676     PMOP *old_PL_curpm= PL_curpm; /* save away the old PL_curpm */
3677
3678     SV* retval = &PL_sv_undef;
3679     HV* swash_hv = NULL;
3680     const int invlist_swash_boundary =
3681         (flags_p && *flags_p & _CORE_SWASH_INIT_ACCEPT_INVLIST)
3682         ? 512    /* Based on some benchmarking, but not extensive, see commit
3683                     message */
3684         : -1;   /* Never return just an inversion list */
3685
3686     assert(listsv != &PL_sv_undef || strNE(name, "") || invlist);
3687     assert(! invlist || minbits == 1);
3688
3689     PL_curpm= NULL; /* reset PL_curpm so that we dont get confused between the
3690                        regex that triggered the swash init and the swash init
3691                        perl logic itself.  See perl #122747 */
3692
3693     /* If data was passed in to go out to utf8_heavy to find the swash of, do
3694      * so */
3695     if (listsv != &PL_sv_undef || strNE(name, "")) {
3696         dSP;
3697         const size_t pkg_len = strlen(pkg);
3698         const size_t name_len = strlen(name);
3699         HV * const stash = gv_stashpvn(pkg, pkg_len, 0);
3700         SV* errsv_save;
3701         GV *method;
3702
3703         PERL_ARGS_ASSERT__CORE_SWASH_INIT;
3704
3705         PUSHSTACKi(PERLSI_MAGIC);
3706         ENTER;
3707         SAVEHINTS();
3708         save_re_context();
3709         /* We might get here via a subroutine signature which uses a utf8
3710          * parameter name, at which point PL_subname will have been set
3711          * but not yet used. */
3712         save_item(PL_subname);
3713         if (PL_parser && PL_parser->error_count)
3714             SAVEI8(PL_parser->error_count), PL_parser->error_count = 0;
3715         method = gv_fetchmeth(stash, "SWASHNEW", 8, -1);
3716         if (!method) {  /* demand load UTF-8 */
3717             ENTER;
3718             if ((errsv_save = GvSV(PL_errgv))) SAVEFREESV(errsv_save);
3719             GvSV(PL_errgv) = NULL;
3720 #ifndef NO_TAINT_SUPPORT
3721             /* It is assumed that callers of this routine are not passing in
3722              * any user derived data.  */
3723             /* Need to do this after save_re_context() as it will set
3724              * PL_tainted to 1 while saving $1 etc (see the code after getrx:
3725              * in Perl_magic_get).  Even line to create errsv_save can turn on
3726              * PL_tainted.  */
3727             SAVEBOOL(TAINT_get);
3728             TAINT_NOT;
3729 #endif
3730             Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpvn(pkg,pkg_len),
3731                              NULL);
3732             {
3733                 /* Not ERRSV, as there is no need to vivify a scalar we are
3734                    about to discard. */
3735                 SV * const errsv = GvSV(PL_errgv);
3736                 if (!SvTRUE(errsv)) {
3737                     GvSV(PL_errgv) = SvREFCNT_inc_simple(errsv_save);
3738                     SvREFCNT_dec(errsv);
3739                 }
3740             }
3741             LEAVE;
3742         }
3743         SPAGAIN;
3744         PUSHMARK(SP);
3745         EXTEND(SP,5);
3746         mPUSHp(pkg, pkg_len);
3747         mPUSHp(name, name_len);
3748         PUSHs(listsv);
3749         mPUSHi(minbits);
3750         mPUSHi(none);
3751         PUTBACK;
3752         if ((errsv_save = GvSV(PL_errgv))) SAVEFREESV(errsv_save);
3753         GvSV(PL_errgv) = NULL;
3754         /* If we already have a pointer to the method, no need to use
3755          * call_method() to repeat the lookup.  */
3756         if (method
3757             ? call_sv(MUTABLE_SV(method), G_SCALAR)
3758             : call_sv(newSVpvs_flags("SWASHNEW", SVs_TEMP), G_SCALAR | G_METHOD))
3759         {
3760             retval = *PL_stack_sp--;
3761             SvREFCNT_inc(retval);
3762         }
3763         {
3764             /* Not ERRSV.  See above. */
3765             SV * const errsv = GvSV(PL_errgv);
3766             if (!SvTRUE(errsv)) {
3767                 GvSV(PL_errgv) = SvREFCNT_inc_simple(errsv_save);
3768                 SvREFCNT_dec(errsv);
3769             }
3770         }
3771         LEAVE;
3772         POPSTACK;
3773         if (IN_PERL_COMPILETIME) {
3774             CopHINTS_set(PL_curcop, PL_hints);
3775         }
3776         if (!SvROK(retval) || SvTYPE(SvRV(retval)) != SVt_PVHV) {
3777             if (SvPOK(retval)) {
3778
3779                 /* If caller wants to handle missing properties, let them */
3780                 if (flags_p && *flags_p & _CORE_SWASH_INIT_RETURN_IF_UNDEF) {
3781                     CORE_SWASH_INIT_RETURN(NULL);
3782                 }
3783                 Perl_croak(aTHX_
3784                            "Can't find Unicode property definition \"%" SVf "\"",
3785                            SVfARG(retval));
3786                 NOT_REACHED; /* NOTREACHED */
3787             }
3788         }
3789     } /* End of calling the module to find the swash */
3790
3791     /* If this operation fetched a swash, and we will need it later, get it */
3792     if (retval != &PL_sv_undef
3793         && (minbits == 1 || (flags_p
3794                             && ! (*flags_p
3795                                   & _CORE_SWASH_INIT_USER_DEFINED_PROPERTY))))
3796     {
3797         swash_hv = MUTABLE_HV(SvRV(retval));
3798
3799         /* If we don't already know that there is a user-defined component to
3800          * this swash, and the user has indicated they wish to know if there is
3801          * one (by passing <flags_p>), find out */
3802         if (flags_p && ! (*flags_p & _CORE_SWASH_INIT_USER_DEFINED_PROPERTY)) {
3803             SV** user_defined = hv_fetchs(swash_hv, "USER_DEFINED", FALSE);
3804             if (user_defined && SvUV(*user_defined)) {
3805                 *flags_p |= _CORE_SWASH_INIT_USER_DEFINED_PROPERTY;
3806             }
3807         }
3808     }
3809
3810     /* Make sure there is an inversion list for binary properties */
3811     if (minbits == 1) {
3812         SV** swash_invlistsvp = NULL;
3813         SV* swash_invlist = NULL;
3814         bool invlist_in_swash_is_valid = FALSE;
3815         bool swash_invlist_unclaimed = FALSE; /* whether swash_invlist has
3816                                             an unclaimed reference count */
3817
3818         /* If this operation fetched a swash, get its already existing
3819          * inversion list, or create one for it */
3820
3821         if (swash_hv) {
3822             swash_invlistsvp = hv_fetchs(swash_hv, "V", FALSE);
3823             if (swash_invlistsvp) {
3824                 swash_invlist = *swash_invlistsvp;
3825                 invlist_in_swash_is_valid = TRUE;
3826             }
3827             else {
3828                 swash_invlist = _swash_to_invlist(retval);
3829                 swash_invlist_unclaimed = TRUE;
3830             }
3831         }
3832
3833         /* If an inversion list was passed in, have to include it */
3834         if (invlist) {
3835
3836             /* Any fetched swash will by now have an inversion list in it;
3837              * otherwise <swash_invlist>  will be NULL, indicating that we
3838              * didn't fetch a swash */
3839             if (swash_invlist) {
3840
3841                 /* Add the passed-in inversion list, which invalidates the one
3842                  * already stored in the swash */
3843                 invlist_in_swash_is_valid = FALSE;
3844                 SvREADONLY_off(swash_invlist);  /* Turned on again below */
3845                 _invlist_union(invlist, swash_invlist, &swash_invlist);
3846             }
3847             else {
3848
3849                 /* Here, there is no swash already.  Set up a minimal one, if
3850                  * we are going to return a swash */
3851                 if ((int) _invlist_len(invlist) > invlist_swash_boundary) {
3852                     swash_hv = newHV();
3853                     retval = newRV_noinc(MUTABLE_SV(swash_hv));
3854                 }
3855                 swash_invlist = invlist;
3856             }
3857         }
3858
3859         /* Here, we have computed the union of all the passed-in data.  It may
3860          * be that there was an inversion list in the swash which didn't get
3861          * touched; otherwise save the computed one */
3862         if (! invlist_in_swash_is_valid
3863             && (int) _invlist_len(swash_invlist) > invlist_swash_boundary)
3864         {
3865             if (! hv_stores(MUTABLE_HV(SvRV(retval)), "V", swash_invlist))
3866             {
3867                 Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
3868             }
3869             /* We just stole a reference count. */
3870             if (swash_invlist_unclaimed) swash_invlist_unclaimed = FALSE;
3871             else SvREFCNT_inc_simple_void_NN(swash_invlist);
3872         }
3873
3874         /* The result is immutable.  Forbid attempts to change it. */
3875         SvREADONLY_on(swash_invlist);
3876
3877         /* Use the inversion list stand-alone if small enough */
3878         if ((int) _invlist_len(swash_invlist) <= invlist_swash_boundary) {
3879             SvREFCNT_dec(retval);
3880             if (!swash_invlist_unclaimed)
3881                 SvREFCNT_inc_simple_void_NN(swash_invlist);
3882             retval = newRV_noinc(swash_invlist);
3883         }
3884     }
3885
3886     CORE_SWASH_INIT_RETURN(retval);
3887 #undef CORE_SWASH_INIT_RETURN
3888 }
3889
3890
3891 /* This API is wrong for special case conversions since we may need to
3892  * return several Unicode characters for a single Unicode character
3893  * (see lib/unicore/SpecCase.txt) The SWASHGET in lib/utf8_heavy.pl is
3894  * the lower-level routine, and it is similarly broken for returning
3895  * multiple values.  --jhi
3896  * For those, you should use S__to_utf8_case() instead */
3897 /* Now SWASHGET is recasted into S_swatch_get in this file. */
3898
3899 /* Note:
3900  * Returns the value of property/mapping C<swash> for the first character
3901  * of the string C<ptr>. If C<do_utf8> is true, the string C<ptr> is
3902  * assumed to be in well-formed UTF-8. If C<do_utf8> is false, the string C<ptr>
3903  * is assumed to be in native 8-bit encoding. Caches the swatch in C<swash>.
3904  *
3905  * A "swash" is a hash which contains initially the keys/values set up by
3906  * SWASHNEW.  The purpose is to be able to completely represent a Unicode
3907  * property for all possible code points.  Things are stored in a compact form
3908  * (see utf8_heavy.pl) so that calculation is required to find the actual
3909  * property value for a given code point.  As code points are looked up, new
3910  * key/value pairs are added to the hash, so that the calculation doesn't have
3911  * to ever be re-done.  Further, each calculation is done, not just for the
3912  * desired one, but for a whole block of code points adjacent to that one.
3913  * For binary properties on ASCII machines, the block is usually for 64 code
3914  * points, starting with a code point evenly divisible by 64.  Thus if the
3915  * property value for code point 257 is requested, the code goes out and
3916  * calculates the property values for all 64 code points between 256 and 319,
3917  * and stores these as a single 64-bit long bit vector, called a "swatch",
3918  * under the key for code point 256.  The key is the UTF-8 encoding for code
3919  * point 256, minus the final byte.  Thus, if the length of the UTF-8 encoding
3920  * for a code point is 13 bytes, the key will be 12 bytes long.  If the value
3921  * for code point 258 is then requested, this code realizes that it would be
3922  * stored under the key for 256, and would find that value and extract the
3923  * relevant bit, offset from 256.
3924  *
3925  * Non-binary properties are stored in as many bits as necessary to represent
3926  * their values (32 currently, though the code is more general than that), not
3927  * as single bits, but the principle is the same: the value for each key is a
3928  * vector that encompasses the property values for all code points whose UTF-8
3929  * representations are represented by the key.  That is, for all code points
3930  * whose UTF-8 representations are length N bytes, and the key is the first N-1
3931  * bytes of that.
3932  */
3933 UV
3934 Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8)
3935 {
3936     HV *const hv = MUTABLE_HV(SvRV(swash));
3937     U32 klen;
3938     U32 off;
3939     STRLEN slen = 0;
3940     STRLEN needents;
3941     const U8 *tmps = NULL;
3942     SV *swatch;
3943     const U8 c = *ptr;
3944
3945     PERL_ARGS_ASSERT_SWASH_FETCH;
3946
3947     /* If it really isn't a hash, it isn't really swash; must be an inversion
3948      * list */
3949     if (SvTYPE(hv) != SVt_PVHV) {
3950         return _invlist_contains_cp((SV*)hv,
3951                                     (do_utf8)
3952                                      ? valid_utf8_to_uvchr(ptr, NULL)
3953                                      : c);
3954     }
3955
3956     /* We store the values in a "swatch" which is a vec() value in a swash
3957      * hash.  Code points 0-255 are a single vec() stored with key length
3958      * (klen) 0.  All other code points have a UTF-8 representation
3959      * 0xAA..0xYY,0xZZ.  A vec() is constructed containing all of them which
3960      * share 0xAA..0xYY, which is the key in the hash to that vec.  So the key
3961      * length for them is the length of the encoded char - 1.  ptr[klen] is the
3962      * final byte in the sequence representing the character */
3963     if (!do_utf8 || UTF8_IS_INVARIANT(c)) {
3964         klen = 0;
3965         needents = 256;
3966         off = c;
3967     }
3968     else if (UTF8_IS_DOWNGRADEABLE_START(c)) {
3969         klen = 0;
3970         needents = 256;
3971         off = EIGHT_BIT_UTF8_TO_NATIVE(c, *(ptr + 1));
3972     }
3973     else {
3974         klen = UTF8SKIP(ptr) - 1;
3975
3976         /* Each vec() stores 2**UTF_ACCUMULATION_SHIFT values.  The offset into
3977          * the vec is the final byte in the sequence.  (In EBCDIC this is
3978          * converted to I8 to get consecutive values.)  To help you visualize
3979          * all this:
3980          *                       Straight 1047   After final byte
3981          *             UTF-8      UTF-EBCDIC     I8 transform
3982          *  U+0400:  \xD0\x80    \xB8\x41\x41    \xB8\x41\xA0
3983          *  U+0401:  \xD0\x81    \xB8\x41\x42    \xB8\x41\xA1
3984          *    ...
3985          *  U+0409:  \xD0\x89    \xB8\x41\x4A    \xB8\x41\xA9
3986          *  U+040A:  \xD0\x8A    \xB8\x41\x51    \xB8\x41\xAA
3987          *    ...
3988          *  U+0412:  \xD0\x92    \xB8\x41\x59    \xB8\x41\xB2
3989          *  U+0413:  \xD0\x93    \xB8\x41\x62    \xB8\x41\xB3
3990          *    ...
3991          *  U+041B:  \xD0\x9B    \xB8\x41\x6A    \xB8\x41\xBB
3992          *  U+041C:  \xD0\x9C    \xB8\x41\x70    \xB8\x41\xBC
3993          *    ...
3994          *  U+041F:  \xD0\x9F    \xB8\x41\x73    \xB8\x41\xBF
3995          *  U+0420:  \xD0\xA0    \xB8\x42\x41    \xB8\x42\x41
3996          *
3997          * (There are no discontinuities in the elided (...) entries.)
3998          * The UTF-8 key for these 33 code points is '\xD0' (which also is the
3999          * key for the next 31, up through U+043F, whose UTF-8 final byte is
4000          * \xBF).  Thus in UTF-8, each key is for a vec() for 64 code points.
4001          * The final UTF-8 byte, which ranges between \x80 and \xBF, is an
4002          * index into the vec() swatch (after subtracting 0x80, which we
4003          * actually do with an '&').
4004          * In UTF-EBCDIC, each key is for a 32 code point vec().  The first 32
4005          * code points above have key '\xB8\x41'. The final UTF-EBCDIC byte has
4006          * dicontinuities which go away by transforming it into I8, and we
4007          * effectively subtract 0xA0 to get the index. */
4008         needents = (1 << UTF_ACCUMULATION_SHIFT);
4009         off      = NATIVE_UTF8_TO_I8(ptr[klen]) & UTF_CONTINUATION_MASK;
4010     }
4011
4012     /*
4013      * This single-entry cache saves about 1/3 of the UTF-8 overhead in test
4014      * suite.  (That is, only 7-8% overall over just a hash cache.  Still,
4015      * it's nothing to sniff at.)  Pity we usually come through at least
4016      * two function calls to get here...
4017      *
4018      * NB: this code assumes that swatches are never modified, once generated!
4019      */
4020
4021     if (hv   == PL_last_swash_hv &&
4022         klen == PL_last_swash_klen &&
4023         (!klen || memEQ((char *)ptr, (char *)PL_last_swash_key, klen)) )
4024     {
4025         tmps = PL_last_swash_tmps;
4026         slen = PL_last_swash_slen;
4027     }
4028     else {
4029         /* Try our second-level swatch cache, kept in a hash. */
4030         SV** svp = hv_fetch(hv, (const char*)ptr, klen, FALSE);
4031
4032         /* If not cached, generate it via swatch_get */
4033         if (!svp || !SvPOK(*svp)
4034                  || !(tmps = (const U8*)SvPV_const(*svp, slen)))
4035         {
4036             if (klen) {
4037                 const UV code_point = valid_utf8_to_uvchr(ptr, NULL);
4038                 swatch = swatch_get(swash,
4039                                     code_point & ~((UV)needents - 1),
4040                                     needents);
4041             }
4042             else {  /* For the first 256 code points, the swatch has a key of
4043                        length 0 */
4044                 swatch = swatch_get(swash, 0, needents);
4045             }
4046
4047             if (IN_PERL_COMPILETIME)
4048                 CopHINTS_set(PL_curcop, PL_hints);
4049
4050             svp = hv_store(hv, (const char *)ptr, klen, swatch, 0);
4051
4052             if (!svp || !(tmps = (U8*)SvPV(*svp, slen))
4053                      || (slen << 3) < needents)
4054                 Perl_croak(aTHX_ "panic: swash_fetch got improper swatch, "
4055                            "svp=%p, tmps=%p, slen=%" UVuf ", needents=%" UVuf,
4056                            svp, tmps, (UV)slen, (UV)needents);
4057         }
4058
4059         PL_last_swash_hv = hv;
4060         assert(klen <= sizeof(PL_last_swash_key));
4061         PL_last_swash_klen = (U8)klen;
4062         /* FIXME change interpvar.h?  */
4063         PL_last_swash_tmps = (U8 *) tmps;
4064         PL_last_swash_slen = slen;
4065         if (klen)
4066             Copy(ptr, PL_last_swash_key, klen, U8);
4067     }
4068
4069     switch ((int)((slen << 3) / needents)) {
4070     case 1:
4071         return ((UV) tmps[off >> 3] & (1 << (off & 7))) != 0;
4072     case 8:
4073         return ((UV) tmps[off]);
4074     case 16:
4075         off <<= 1;
4076         return
4077             ((UV) tmps[off    ] << 8) +
4078             ((UV) tmps[off + 1]);
4079     case 32:
4080         off <<= 2;
4081         return
4082             ((UV) tmps[off    ] << 24) +
4083             ((UV) tmps[off + 1] << 16) +
4084             ((UV) tmps[off + 2] <<  8) +
4085             ((UV) tmps[off + 3]);
4086     }
4087     Perl_croak(aTHX_ "panic: swash_fetch got swatch of unexpected bit width, "
4088                "slen=%" UVuf ", needents=%" UVuf, (UV)slen, (UV)needents);
4089     NORETURN_FUNCTION_END;
4090 }
4091
4092 /* Read a single line of the main body of the swash input text.  These are of
4093  * the form:
4094  * 0053 0056    0073
4095  * where each number is hex.  The first two numbers form the minimum and
4096  * maximum of a range, and the third is the value associated with the range.
4097  * Not all swashes should have a third number
4098  *
4099  * On input: l    points to the beginning of the line to be examined; it points
4100  *                to somewhere in the string of the whole input text, and is
4101  *                terminated by a \n or the null string terminator.
4102  *           lend   points to the null terminator of that string
4103  *           wants_value    is non-zero if the swash expects a third number
4104  *           typestr is the name of the swash's mapping, like 'ToLower'
4105  * On output: *min, *max, and *val are set to the values read from the line.
4106  *            returns a pointer just beyond the line examined.  If there was no
4107  *            valid min number on the line, returns lend+1
4108  */
4109
4110 STATIC U8*
4111 S_swash_scan_list_line(pTHX_ U8* l, U8* const lend, UV* min, UV* max, UV* val,
4112                              const bool wants_value, const U8* const typestr)
4113 {
4114     const int  typeto  = typestr[0] == 'T' && typestr[1] == 'o';
4115     STRLEN numlen;          /* Length of the number */
4116     I32 flags = PERL_SCAN_SILENT_ILLDIGIT
4117                 | PERL_SCAN_DISALLOW_PREFIX
4118                 | PERL_SCAN_SILENT_NON_PORTABLE;
4119
4120     /* nl points to the next \n in the scan */
4121     U8* const nl = (U8*)memchr(l, '\n', lend - l);
4122
4123     PERL_ARGS_ASSERT_SWASH_SCAN_LIST_LINE;
4124
4125     /* Get the first number on the line: the range minimum */
4126     numlen = lend - l;
4127     *min = grok_hex((char *)l, &numlen, &flags, NULL);
4128     *max = *min;    /* So can never return without setting max */
4129     if (numlen)     /* If found a hex number, position past it */
4130         l += numlen;
4131     else if (nl) {          /* Else, go handle next line, if any */
4132         return nl + 1;  /* 1 is length of "\n" */
4133     }
4134     else {              /* Else, no next line */
4135         return lend + 1;        /* to LIST's end at which \n is not found */
4136     }
4137
4138     /* The max range value follows, separated by a BLANK */
4139     if (isBLANK(*l)) {
4140         ++l;
4141         flags = PERL_SCAN_SILENT_ILLDIGIT
4142                 | PERL_SCAN_DISALLOW_PREFIX
4143                 | PERL_SCAN_SILENT_NON_PORTABLE;
4144         numlen = lend - l;
4145         *max = grok_hex((char *)l, &numlen, &flags, NULL);
4146         if (numlen)
4147             l += numlen;
4148         else    /* If no value here, it is a single element range */
4149             *max = *min;
4150
4151         /* Non-binary tables have a third entry: what the first element of the
4152          * range maps to.  The map for those currently read here is in hex */
4153         if (wants_value) {
4154             if (isBLANK(*l)) {
4155                 ++l;
4156                 flags = PERL_SCAN_SILENT_ILLDIGIT
4157                     | PERL_SCAN_DISALLOW_PREFIX
4158                     | PERL_SCAN_SILENT_NON_PORTABLE;
4159                 numlen = lend - l;
4160                 *val = grok_hex((char *)l, &numlen, &flags, NULL);
4161                 if (numlen)
4162                     l += numlen;
4163                 else
4164                     *val = 0;
4165             }
4166             else {
4167                 *val = 0;
4168                 if (typeto) {
4169                     /* diag_listed_as: To%s: illegal mapping '%s' */
4170                     Perl_croak(aTHX_ "%s: illegal mapping '%s'",
4171                                      typestr, l);
4172                 }
4173             }
4174         }
4175         else
4176             *val = 0; /* bits == 1, then any val should be ignored */
4177     }
4178     else { /* Nothing following range min, should be single element with no
4179               mapping expected */
4180         if (wants_value) {
4181             *val = 0;
4182             if (typeto) {
4183                 /* diag_listed_as: To%s: illegal mapping '%s' */
4184                 Perl_croak(aTHX_ "%s: illegal mapping '%s'", typestr, l);
4185             }
4186         }
4187         else
4188             *val = 0; /* bits == 1, then val should be ignored */
4189     }
4190
4191     /* Position to next line if any, or EOF */
4192     if (nl)
4193         l = nl + 1;
4194     else
4195         l = lend;
4196
4197     return l;
4198 }
4199
4200 /* Note:
4201  * Returns a swatch (a bit vector string) for a code point sequence
4202  * that starts from the value C<start> and comprises the number C<span>.
4203  * A C<swash> must be an object created by SWASHNEW (see lib/utf8_heavy.pl).
4204  * Should be used via swash_fetch, which will cache the swatch in C<swash>.
4205  */
4206 STATIC SV*
4207 S_swatch_get(pTHX_ SV* swash, UV start, UV span)
4208 {
4209     SV *swatch;
4210     U8 *l, *lend, *x, *xend, *s, *send;
4211     STRLEN lcur, xcur, scur;
4212     HV *const hv = MUTABLE_HV(SvRV(swash));
4213     SV** const invlistsvp = hv_fetchs(hv, "V", FALSE);
4214
4215     SV** listsvp = NULL; /* The string containing the main body of the table */
4216     SV** extssvp = NULL;
4217     SV** invert_it_svp = NULL;
4218     U8* typestr = NULL;
4219     STRLEN bits;
4220     STRLEN octets; /* if bits == 1, then octets == 0 */
4221     UV  none;
4222     UV  end = start + span;
4223
4224     if (invlistsvp == NULL) {
4225         SV** const bitssvp = hv_fetchs(hv, "BITS", FALSE);
4226         SV** const nonesvp = hv_fetchs(hv, "NONE", FALSE);
4227         SV** const typesvp = hv_fetchs(hv, "TYPE", FALSE);
4228         extssvp = hv_fetchs(hv, "EXTRAS", FALSE);
4229         listsvp = hv_fetchs(hv, "LIST", FALSE);
4230         invert_it_svp = hv_fetchs(hv, "INVERT_IT", FALSE);
4231
4232         bits  = SvUV(*bitssvp);
4233         none  = SvUV(*nonesvp);
4234         typestr = (U8*)SvPV_nolen(*typesvp);
4235     }
4236     else {
4237         bits = 1;
4238         none = 0;
4239     }
4240     octets = bits >> 3; /* if bits == 1, then octets == 0 */
4241
4242     PERL_ARGS_ASSERT_SWATCH_GET;
4243
4244     if (bits != 1 && bits != 8 && bits != 16 && bits != 32) {
4245         Perl_croak(aTHX_ "panic: swatch_get doesn't expect bits %" UVuf,
4246                                                  (UV)bits);
4247     }
4248
4249     /* If overflowed, use the max possible */
4250     if (end < start) {
4251         end = UV_MAX;
4252         span = end - start;
4253     }
4254
4255     /* create and initialize $swatch */
4256     scur   = octets ? (span * octets) : (span + 7) / 8;
4257     swatch = newSV(scur);
4258     SvPOK_on(swatch);
4259     s = (U8*)SvPVX(swatch);
4260     if (octets && none) {
4261         const U8* const e = s + scur;
4262         while (s < e) {
4263             if (bits == 8)
4264                 *s++ = (U8)(none & 0xff);
4265             else if (bits == 16) {
4266                 *s++ = (U8)((none >>  8) & 0xff);
4267                 *s++ = (U8)( none        & 0xff);
4268             }
4269             else if (bits == 32) {
4270                 *s++ = (U8)((none >> 24) & 0xff);
4271                 *s++ = (U8)((none >> 16) & 0xff);
4272                 *s++ = (U8)((none >>  8) & 0xff);
4273                 *s++ = (U8)( none        & 0xff);
4274             }
4275         }
4276         *s = '\0';
4277     }
4278     else {
4279         (void)memzero((U8*)s, scur + 1);
4280     }
4281     SvCUR_set(swatch, scur);
4282     s = (U8*)SvPVX(swatch);
4283
4284     if (invlistsvp) {   /* If has an inversion list set up use that */
4285         _invlist_populate_swatch(*invlistsvp, start, end, s);
4286         return swatch;
4287     }
4288
4289     /* read $swash->{LIST} */
4290     l = (U8*)SvPV