This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
1cd191dc1cd548fa53f0869fd0805a8c2158eb1e
[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                                               /* isn't problematic if < this */
1308     if (   (   (   LIKELY(! possible_problems) && uv >= UNICODE_SURROGATE_FIRST)
1309             || (   UNLIKELY(possible_problems)
1310
1311                           /* if overflow, we know without looking further
1312                            * precisely which of the problematic types it is,
1313                            * and we deal with those in the overflow handling
1314                            * code */
1315                 && LIKELY(! (possible_problems & UTF8_GOT_OVERFLOW))
1316                 && isUTF8_POSSIBLY_PROBLEMATIC(*adjusted_s0)))
1317         && ((flags & ( UTF8_DISALLOW_NONCHAR
1318                       |UTF8_DISALLOW_SURROGATE
1319                       |UTF8_DISALLOW_SUPER
1320                       |UTF8_DISALLOW_ABOVE_31_BIT
1321                       |UTF8_WARN_NONCHAR
1322                       |UTF8_WARN_SURROGATE
1323                       |UTF8_WARN_SUPER
1324                       |UTF8_WARN_ABOVE_31_BIT))
1325                    /* In case of a malformation, 'uv' is not valid, and has
1326                     * been changed to something in the Unicode range.
1327                     * Currently we don't output a deprecation message if there
1328                     * is already a malformation, so we don't have to special
1329                     * case the test immediately below */
1330             || (   UNLIKELY(uv > MAX_NON_DEPRECATED_CP)
1331                 && ckWARN_d(WARN_DEPRECATED))))
1332     {
1333         /* If there were no malformations, or the only malformation is an
1334          * overlong, 'uv' is valid */
1335         if (LIKELY(! (possible_problems & ~UTF8_GOT_LONG))) {
1336             if (UNLIKELY(UNICODE_IS_SURROGATE(uv))) {
1337                 possible_problems |= UTF8_GOT_SURROGATE;
1338             }
1339             else if (UNLIKELY(uv > PERL_UNICODE_MAX)) {
1340                 possible_problems |= UTF8_GOT_SUPER;
1341             }
1342             else if (UNLIKELY(UNICODE_IS_NONCHAR(uv))) {
1343                 possible_problems |= UTF8_GOT_NONCHAR;
1344             }
1345         }
1346         else {  /* Otherwise, need to look at the source UTF-8, possibly
1347                    adjusted to be non-overlong */
1348
1349             if (UNLIKELY(NATIVE_UTF8_TO_I8(*adjusted_s0)
1350                                 >= FIRST_START_BYTE_THAT_IS_DEFINITELY_SUPER))
1351             {
1352                 possible_problems |= UTF8_GOT_SUPER;
1353             }
1354             else if (curlen > 1) {
1355                 if (UNLIKELY(IS_UTF8_2_BYTE_SUPER(
1356                                       NATIVE_UTF8_TO_I8(*adjusted_s0),
1357                                       NATIVE_UTF8_TO_I8(*(adjusted_s0 + 1)))))
1358                 {
1359                     possible_problems |= UTF8_GOT_SUPER;
1360                 }
1361                 else if (UNLIKELY(IS_UTF8_2_BYTE_SURROGATE(
1362                                       NATIVE_UTF8_TO_I8(*adjusted_s0),
1363                                       NATIVE_UTF8_TO_I8(*(adjusted_s0 + 1)))))
1364                 {
1365                     possible_problems |= UTF8_GOT_SURROGATE;
1366                 }
1367             }
1368
1369             /* We need a complete well-formed UTF-8 character to discern
1370              * non-characters, so can't look for them here */
1371         }
1372     }
1373
1374   ready_to_handle_errors:
1375
1376     /* At this point:
1377      * curlen               contains the number of bytes in the sequence that
1378      *                      this call should advance the input by.
1379      * avail_len            gives the available number of bytes passed in, but
1380      *                      only if this is less than the expected number of
1381      *                      bytes, based on the code point's start byte.
1382      * possible_problems'   is 0 if there weren't any problems; otherwise a bit
1383      *                      is set in it for each potential problem found.
1384      * uv                   contains the code point the input sequence
1385      *                      represents; or if there is a problem that prevents
1386      *                      a well-defined value from being computed, it is
1387      *                      some subsitute value, typically the REPLACEMENT
1388      *                      CHARACTER.
1389      * s0                   points to the first byte of the character
1390      * s                    points to just after were we left off processing
1391      *                      the character
1392      * send                 points to just after where that character should
1393      *                      end, based on how many bytes the start byte tells
1394      *                      us should be in it, but no further than s0 +
1395      *                      avail_len
1396      * adjusted_s0          normally is the same as s0, but in case of an
1397      *                      overlong for which the UTF-8 matters below, it is
1398      *                      the first byte of the shortest form representation
1399      *                      of the input.
1400      * adjusted_send        normally is the same as 'send', but if adjusted_s0
1401      *                      is set to something other than s0, this points one
1402      *                      beyond its end
1403      */
1404
1405     if (UNLIKELY(possible_problems)) {
1406         bool disallowed = FALSE;
1407         const U32 orig_problems = possible_problems;
1408
1409         while (possible_problems) { /* Handle each possible problem */
1410             UV pack_warn = 0;
1411             char * message = NULL;
1412
1413             /* Each 'if' clause handles one problem.  They are ordered so that
1414              * the first ones' messages will be displayed before the later
1415              * ones; this is kinda in decreasing severity order */
1416             if (possible_problems & UTF8_GOT_OVERFLOW) {
1417
1418                 /* Overflow means also got a super and are using Perl's
1419                  * extended UTF-8, but we handle all three cases here */
1420                 possible_problems
1421                   &= ~(UTF8_GOT_OVERFLOW|UTF8_GOT_SUPER|UTF8_GOT_ABOVE_31_BIT);
1422                 *errors |= UTF8_GOT_OVERFLOW;
1423
1424                 /* But the API says we flag all errors found */
1425                 if (flags & (UTF8_WARN_SUPER|UTF8_DISALLOW_SUPER)) {
1426                     *errors |= UTF8_GOT_SUPER;
1427                 }
1428                 if (flags
1429                         & (UTF8_WARN_ABOVE_31_BIT|UTF8_DISALLOW_ABOVE_31_BIT))
1430                 {
1431                     *errors |= UTF8_GOT_ABOVE_31_BIT;
1432                 }
1433
1434                 /* Disallow if any of the three categories say to */
1435                 if ( ! (flags &   UTF8_ALLOW_OVERFLOW)
1436                     || (flags & ( UTF8_DISALLOW_SUPER
1437                                  |UTF8_DISALLOW_ABOVE_31_BIT)))
1438                 {
1439                     disallowed = TRUE;
1440                 }
1441
1442                 /* Likewise, warn if any say to, plus if deprecation warnings
1443                  * are on, because this code point is above IV_MAX */
1444                 if (      ckWARN_d(WARN_DEPRECATED)
1445                     || ! (flags & UTF8_ALLOW_OVERFLOW)
1446                     ||   (flags & (UTF8_WARN_SUPER|UTF8_WARN_ABOVE_31_BIT)))
1447                 {
1448
1449                     /* The warnings code explicitly says it doesn't handle the
1450                      * case of packWARN2 and two categories which have
1451                      * parent-child relationship.  Even if it works now to
1452                      * raise the warning if either is enabled, it wouldn't
1453                      * necessarily do so in the future.  We output (only) the
1454                      * most dire warning */
1455                     if (! (flags & UTF8_CHECK_ONLY)) {
1456                         if (ckWARN_d(WARN_UTF8)) {
1457                             pack_warn = packWARN(WARN_UTF8);
1458                         }
1459                         else if (ckWARN_d(WARN_NON_UNICODE)) {
1460                             pack_warn = packWARN(WARN_NON_UNICODE);
1461                         }
1462                         if (pack_warn) {
1463                             message = Perl_form(aTHX_ "%s: %s (overflows)",
1464                                             malformed_text,
1465                                             _byte_dump_string(s0, curlen, 0));
1466                         }
1467                     }
1468                 }
1469             }
1470             else if (possible_problems & UTF8_GOT_EMPTY) {
1471                 possible_problems &= ~UTF8_GOT_EMPTY;
1472                 *errors |= UTF8_GOT_EMPTY;
1473
1474                 if (! (flags & UTF8_ALLOW_EMPTY)) {
1475
1476                     /* This so-called malformation is now treated as a bug in
1477                      * the caller.  If you have nothing to decode, skip calling
1478                      * this function */
1479                     assert(0);
1480
1481                     disallowed = TRUE;
1482                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1483                         pack_warn = packWARN(WARN_UTF8);
1484                         message = Perl_form(aTHX_ "%s (empty string)",
1485                                                    malformed_text);
1486                     }
1487                 }
1488             }
1489             else if (possible_problems & UTF8_GOT_CONTINUATION) {
1490                 possible_problems &= ~UTF8_GOT_CONTINUATION;
1491                 *errors |= UTF8_GOT_CONTINUATION;
1492
1493                 if (! (flags & UTF8_ALLOW_CONTINUATION)) {
1494                     disallowed = TRUE;
1495                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1496                         pack_warn = packWARN(WARN_UTF8);
1497                         message = Perl_form(aTHX_
1498                                 "%s: %s (unexpected continuation byte 0x%02x,"
1499                                 " with no preceding start byte)",
1500                                 malformed_text,
1501                                 _byte_dump_string(s0, 1, 0), *s0);
1502                     }
1503                 }
1504             }
1505             else if (possible_problems & UTF8_GOT_SHORT) {
1506                 possible_problems &= ~UTF8_GOT_SHORT;
1507                 *errors |= UTF8_GOT_SHORT;
1508
1509                 if (! (flags & UTF8_ALLOW_SHORT)) {
1510                     disallowed = TRUE;
1511                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1512                         pack_warn = packWARN(WARN_UTF8);
1513                         message = Perl_form(aTHX_
1514                              "%s: %s (too short; %d byte%s available, need %d)",
1515                              malformed_text,
1516                              _byte_dump_string(s0, send - s0, 0),
1517                              (int)avail_len,
1518                              avail_len == 1 ? "" : "s",
1519                              (int)expectlen);
1520                     }
1521                 }
1522
1523             }
1524             else if (possible_problems & UTF8_GOT_NON_CONTINUATION) {
1525                 possible_problems &= ~UTF8_GOT_NON_CONTINUATION;
1526                 *errors |= UTF8_GOT_NON_CONTINUATION;
1527
1528                 if (! (flags & UTF8_ALLOW_NON_CONTINUATION)) {
1529                     disallowed = TRUE;
1530                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1531
1532                         /* If we don't know for sure that the input length is
1533                          * valid, avoid as much as possible reading past the
1534                          * end of the buffer */
1535                         int printlen = (flags & _UTF8_NO_CONFIDENCE_IN_CURLEN)
1536                                        ? s - s0
1537                                        : send - s0;
1538                         pack_warn = packWARN(WARN_UTF8);
1539                         message = Perl_form(aTHX_ "%s",
1540                             unexpected_non_continuation_text(s0,
1541                                                             printlen,
1542                                                             s - s0,
1543                                                             (int) expectlen));
1544                     }
1545                 }
1546             }
1547             else if (possible_problems & UTF8_GOT_LONG) {
1548                 possible_problems &= ~UTF8_GOT_LONG;
1549                 *errors |= UTF8_GOT_LONG;
1550
1551                 if (flags & UTF8_ALLOW_LONG) {
1552
1553                     /* We don't allow the actual overlong value, unless the
1554                      * special extra bit is also set */
1555                     if (! (flags & (   UTF8_ALLOW_LONG_AND_ITS_VALUE
1556                                     & ~UTF8_ALLOW_LONG)))
1557                     {
1558                         uv = UNICODE_REPLACEMENT;
1559                     }
1560                 }
1561                 else {
1562                     disallowed = TRUE;
1563
1564                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1565                         pack_warn = packWARN(WARN_UTF8);
1566
1567                         /* These error types cause 'uv' to be something that
1568                          * isn't what was intended, so can't use it in the
1569                          * message.  The other error types either can't
1570                          * generate an overlong, or else the 'uv' is valid */
1571                         if (orig_problems &
1572                                         (UTF8_GOT_TOO_SHORT|UTF8_GOT_OVERFLOW))
1573                         {
1574                             message = Perl_form(aTHX_
1575                                     "%s: %s (any UTF-8 sequence that starts"
1576                                     " with \"%s\" is overlong which can and"
1577                                     " should be represented with a"
1578                                     " different, shorter sequence)",
1579                                     malformed_text,
1580                                     _byte_dump_string(s0, send - s0, 0),
1581                                     _byte_dump_string(s0, curlen, 0));
1582                         }
1583                         else {
1584                             U8 tmpbuf[UTF8_MAXBYTES+1];
1585                             const U8 * const e = uvoffuni_to_utf8_flags(tmpbuf,
1586                                                                         uv, 0);
1587                             message = Perl_form(aTHX_
1588                                 "%s: %s (overlong; instead use %s to represent"
1589                                 " U+%0*" UVXf ")",
1590                                 malformed_text,
1591                                 _byte_dump_string(s0, curlen, 0),
1592                                 _byte_dump_string(tmpbuf, e - tmpbuf, 0),
1593                                 ((uv < 256) ? 2 : 4), /* Field width of 2 for
1594                                                          small code points */
1595                                 uv);
1596                         }
1597                     }
1598                 }
1599             }
1600             else if (possible_problems & UTF8_GOT_SURROGATE) {
1601                 possible_problems &= ~UTF8_GOT_SURROGATE;
1602
1603                 if (flags & UTF8_WARN_SURROGATE) {
1604                     *errors |= UTF8_GOT_SURROGATE;
1605
1606                     if (   ! (flags & UTF8_CHECK_ONLY)
1607                         && ckWARN_d(WARN_SURROGATE))
1608                     {
1609                         pack_warn = packWARN(WARN_SURROGATE);
1610
1611                         /* These are the only errors that can occur with a
1612                         * surrogate when the 'uv' isn't valid */
1613                         if (orig_problems & UTF8_GOT_TOO_SHORT) {
1614                             message = Perl_form(aTHX_
1615                                     "UTF-16 surrogate (any UTF-8 sequence that"
1616                                     " starts with \"%s\" is for a surrogate)",
1617                                     _byte_dump_string(s0, curlen, 0));
1618                         }
1619                         else {
1620                             message = Perl_form(aTHX_ surrogate_cp_format, uv);
1621                         }
1622                     }
1623                 }
1624
1625                 if (flags & UTF8_DISALLOW_SURROGATE) {
1626                     disallowed = TRUE;
1627                     *errors |= UTF8_GOT_SURROGATE;
1628                 }
1629             }
1630             else if (possible_problems & UTF8_GOT_SUPER) {
1631                 possible_problems &= ~UTF8_GOT_SUPER;
1632
1633                 if (flags & UTF8_WARN_SUPER) {
1634                     *errors |= UTF8_GOT_SUPER;
1635
1636                     if (   ! (flags & UTF8_CHECK_ONLY)
1637                         && ckWARN_d(WARN_NON_UNICODE))
1638                     {
1639                         pack_warn = packWARN(WARN_NON_UNICODE);
1640
1641                         if (orig_problems & UTF8_GOT_TOO_SHORT) {
1642                             message = Perl_form(aTHX_
1643                                     "Any UTF-8 sequence that starts with"
1644                                     " \"%s\" is for a non-Unicode code point,"
1645                                     " may not be portable",
1646                                     _byte_dump_string(s0, curlen, 0));
1647                         }
1648                         else {
1649                             message = Perl_form(aTHX_ super_cp_format, uv);
1650                         }
1651                     }
1652                 }
1653
1654                 /* The maximum code point ever specified by a standard was
1655                  * 2**31 - 1.  Anything larger than that is a Perl extension
1656                  * that very well may not be understood by other applications
1657                  * (including earlier perl versions on EBCDIC platforms).  We
1658                  * test for these after the regular SUPER ones, and before
1659                  * possibly bailing out, so that the slightly more dire warning
1660                  * will override the regular one. */
1661                 if (   (flags & (UTF8_WARN_ABOVE_31_BIT
1662                                 |UTF8_WARN_SUPER
1663                                 |UTF8_DISALLOW_ABOVE_31_BIT))
1664                     && (   (   UNLIKELY(orig_problems & UTF8_GOT_TOO_SHORT)
1665                             && UNLIKELY(is_utf8_cp_above_31_bits(
1666                                                 adjusted_s0,
1667                                                 adjusted_send)))
1668                         || (   LIKELY(! (orig_problems & UTF8_GOT_TOO_SHORT))
1669                             && UNLIKELY(UNICODE_IS_ABOVE_31_BIT(uv)))))
1670                 {
1671                     if (  ! (flags & UTF8_CHECK_ONLY)
1672                         &&  (flags & (UTF8_WARN_ABOVE_31_BIT|UTF8_WARN_SUPER))
1673                         &&  ckWARN_d(WARN_UTF8))
1674                     {
1675                         pack_warn = packWARN(WARN_UTF8);
1676
1677                         if (orig_problems & UTF8_GOT_TOO_SHORT) {
1678                             message = Perl_form(aTHX_
1679                                         "Any UTF-8 sequence that starts with"
1680                                         " \"%s\" is for a non-Unicode code"
1681                                         " point, and is not portable",
1682                                         _byte_dump_string(s0, curlen, 0));
1683                         }
1684                         else {
1685                             message = Perl_form(aTHX_
1686                                             above_31_bit_cp_format, uv);
1687                         }
1688                     }
1689
1690                     if (flags & ( UTF8_WARN_ABOVE_31_BIT
1691                                  |UTF8_DISALLOW_ABOVE_31_BIT))
1692                     {
1693                         *errors |= UTF8_GOT_ABOVE_31_BIT;
1694
1695                         if (flags & UTF8_DISALLOW_ABOVE_31_BIT) {
1696                             disallowed = TRUE;
1697                         }
1698                     }
1699                 }
1700
1701                 if (flags & UTF8_DISALLOW_SUPER) {
1702                     *errors |= UTF8_GOT_SUPER;
1703                     disallowed = TRUE;
1704                 }
1705
1706                 /* The deprecated warning overrides any non-deprecated one.  If
1707                  * there are other problems, a deprecation message is not
1708                  * really helpful, so don't bother to raise it in that case.
1709                  * This also keeps the code from having to handle the case
1710                  * where 'uv' is not valid. */
1711                 if (   ! (orig_problems
1712                                     & (UTF8_GOT_TOO_SHORT|UTF8_GOT_OVERFLOW))
1713                     && UNLIKELY(uv > MAX_NON_DEPRECATED_CP)
1714                     && ckWARN_d(WARN_DEPRECATED))
1715                 {
1716                     message = Perl_form(aTHX_ cp_above_legal_max,
1717                                               uv, MAX_NON_DEPRECATED_CP);
1718                     pack_warn = packWARN(WARN_DEPRECATED);
1719                 }
1720             }
1721             else if (possible_problems & UTF8_GOT_NONCHAR) {
1722                 possible_problems &= ~UTF8_GOT_NONCHAR;
1723
1724                 if (flags & UTF8_WARN_NONCHAR) {
1725                     *errors |= UTF8_GOT_NONCHAR;
1726
1727                     if (  ! (flags & UTF8_CHECK_ONLY)
1728                         && ckWARN_d(WARN_NONCHAR))
1729                     {
1730                         /* The code above should have guaranteed that we don't
1731                          * get here with errors other than overlong */
1732                         assert (! (orig_problems
1733                                         & ~(UTF8_GOT_LONG|UTF8_GOT_NONCHAR)));
1734
1735                         pack_warn = packWARN(WARN_NONCHAR);
1736                         message = Perl_form(aTHX_ nonchar_cp_format, uv);
1737                     }
1738                 }
1739
1740                 if (flags & UTF8_DISALLOW_NONCHAR) {
1741                     disallowed = TRUE;
1742                     *errors |= UTF8_GOT_NONCHAR;
1743                 }
1744             } /* End of looking through the possible flags */
1745
1746             /* Display the message (if any) for the problem being handled in
1747              * this iteration of the loop */
1748             if (message) {
1749                 if (PL_op)
1750                     Perl_warner(aTHX_ pack_warn, "%s in %s", message,
1751                                                  OP_DESC(PL_op));
1752                 else
1753                     Perl_warner(aTHX_ pack_warn, "%s", message);
1754             }
1755         }   /* End of 'while (possible_problems)' */
1756
1757         /* Since there was a possible problem, the returned length may need to
1758          * be changed from the one stored at the beginning of this function.
1759          * Instead of trying to figure out if that's needed, just do it. */
1760         if (retlen) {
1761             *retlen = curlen;
1762         }
1763
1764         if (disallowed) {
1765             if (flags & UTF8_CHECK_ONLY && retlen) {
1766                 *retlen = ((STRLEN) -1);
1767             }
1768             return 0;
1769         }
1770     }
1771
1772     return UNI_TO_NATIVE(uv);
1773 }
1774
1775 /*
1776 =for apidoc utf8_to_uvchr_buf
1777
1778 Returns the native code point of the first character in the string C<s> which
1779 is assumed to be in UTF-8 encoding; C<send> points to 1 beyond the end of C<s>.
1780 C<*retlen> will be set to the length, in bytes, of that character.
1781
1782 If C<s> does not point to a well-formed UTF-8 character and UTF8 warnings are
1783 enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
1784 C<NULL>) to -1.  If those warnings are off, the computed value, if well-defined
1785 (or the Unicode REPLACEMENT CHARACTER if not), is silently returned, and
1786 C<*retlen> is set (if C<retlen> isn't C<NULL>) so that (S<C<s> + C<*retlen>>) is
1787 the next possible position in C<s> that could begin a non-malformed character.
1788 See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is
1789 returned.
1790
1791 Code points above the platform's C<IV_MAX> will raise a deprecation warning,
1792 unless those are turned off.
1793
1794 =cut
1795
1796 Also implemented as a macro in utf8.h
1797
1798 */
1799
1800
1801 UV
1802 Perl_utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
1803 {
1804     PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF;
1805
1806     assert(s < send);
1807
1808     return utf8n_to_uvchr(s, send - s, retlen,
1809                      ckWARN_d(WARN_UTF8) ? 0 : UTF8_ALLOW_ANY);
1810 }
1811
1812 /* This is marked as deprecated
1813  *
1814 =for apidoc utf8_to_uvuni_buf
1815
1816 Only in very rare circumstances should code need to be dealing in Unicode
1817 (as opposed to native) code points.  In those few cases, use
1818 C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|/utf8_to_uvchr_buf>> instead.
1819
1820 Returns the Unicode (not-native) code point of the first character in the
1821 string C<s> which
1822 is assumed to be in UTF-8 encoding; C<send> points to 1 beyond the end of C<s>.
1823 C<retlen> will be set to the length, in bytes, of that character.
1824
1825 If C<s> does not point to a well-formed UTF-8 character and UTF8 warnings are
1826 enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
1827 NULL) to -1.  If those warnings are off, the computed value if well-defined (or
1828 the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
1829 is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
1830 next possible position in C<s> that could begin a non-malformed character.
1831 See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
1832
1833 Code points above the platform's C<IV_MAX> will raise a deprecation warning,
1834 unless those are turned off.
1835
1836 =cut
1837 */
1838
1839 UV
1840 Perl_utf8_to_uvuni_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
1841 {
1842     PERL_ARGS_ASSERT_UTF8_TO_UVUNI_BUF;
1843
1844     assert(send > s);
1845
1846     /* Call the low level routine, asking for checks */
1847     return NATIVE_TO_UNI(utf8_to_uvchr_buf(s, send, retlen));
1848 }
1849
1850 /*
1851 =for apidoc utf8_length
1852
1853 Return the length of the UTF-8 char encoded string C<s> in characters.
1854 Stops at C<e> (inclusive).  If C<e E<lt> s> or if the scan would end
1855 up past C<e>, croaks.
1856
1857 =cut
1858 */
1859
1860 STRLEN
1861 Perl_utf8_length(pTHX_ const U8 *s, const U8 *e)
1862 {
1863     STRLEN len = 0;
1864
1865     PERL_ARGS_ASSERT_UTF8_LENGTH;
1866
1867     /* Note: cannot use UTF8_IS_...() too eagerly here since e.g.
1868      * the bitops (especially ~) can create illegal UTF-8.
1869      * In other words: in Perl UTF-8 is not just for Unicode. */
1870
1871     if (e < s)
1872         goto warn_and_return;
1873     while (s < e) {
1874         s += UTF8SKIP(s);
1875         len++;
1876     }
1877
1878     if (e != s) {
1879         len--;
1880         warn_and_return:
1881         if (PL_op)
1882             Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
1883                              "%s in %s", unees, OP_DESC(PL_op));
1884         else
1885             Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "%s", unees);
1886     }
1887
1888     return len;
1889 }
1890
1891 /*
1892 =for apidoc bytes_cmp_utf8
1893
1894 Compares the sequence of characters (stored as octets) in C<b>, C<blen> with the
1895 sequence of characters (stored as UTF-8)
1896 in C<u>, C<ulen>.  Returns 0 if they are
1897 equal, -1 or -2 if the first string is less than the second string, +1 or +2
1898 if the first string is greater than the second string.
1899
1900 -1 or +1 is returned if the shorter string was identical to the start of the
1901 longer string.  -2 or +2 is returned if
1902 there was a difference between characters
1903 within the strings.
1904
1905 =cut
1906 */
1907
1908 int
1909 Perl_bytes_cmp_utf8(pTHX_ const U8 *b, STRLEN blen, const U8 *u, STRLEN ulen)
1910 {
1911     const U8 *const bend = b + blen;
1912     const U8 *const uend = u + ulen;
1913
1914     PERL_ARGS_ASSERT_BYTES_CMP_UTF8;
1915
1916     while (b < bend && u < uend) {
1917         U8 c = *u++;
1918         if (!UTF8_IS_INVARIANT(c)) {
1919             if (UTF8_IS_DOWNGRADEABLE_START(c)) {
1920                 if (u < uend) {
1921                     U8 c1 = *u++;
1922                     if (UTF8_IS_CONTINUATION(c1)) {
1923                         c = EIGHT_BIT_UTF8_TO_NATIVE(c, c1);
1924                     } else {
1925                         /* diag_listed_as: Malformed UTF-8 character%s */
1926                         Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
1927                               "%s %s%s",
1928                               unexpected_non_continuation_text(u - 2, 2, 1, 2),
1929                               PL_op ? " in " : "",
1930                               PL_op ? OP_DESC(PL_op) : "");
1931                         return -2;
1932                     }
1933                 } else {
1934                     if (PL_op)
1935                         Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
1936                                          "%s in %s", unees, OP_DESC(PL_op));
1937                     else
1938                         Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "%s", unees);
1939                     return -2; /* Really want to return undef :-)  */
1940                 }
1941             } else {
1942                 return -2;
1943             }
1944         }
1945         if (*b != c) {
1946             return *b < c ? -2 : +2;
1947         }
1948         ++b;
1949     }
1950
1951     if (b == bend && u == uend)
1952         return 0;
1953
1954     return b < bend ? +1 : -1;
1955 }
1956
1957 /*
1958 =for apidoc utf8_to_bytes
1959
1960 Converts a string C<"s"> of length C<*lenp> from UTF-8 into native byte encoding.
1961 Unlike L</bytes_to_utf8>, this over-writes the original string, and
1962 updates C<*lenp> to contain the new length.
1963 Returns zero on failure (leaving C<"s"> unchanged) setting C<*lenp> to -1.
1964
1965 Upon successful return, the number of variants in the string can be computed by
1966 having saved the value of C<*lenp> before the call, and subtracting the
1967 after-call value of C<*lenp> from it.
1968
1969 If you need a copy of the string, see L</bytes_from_utf8>.
1970
1971 =cut
1972 */
1973
1974 U8 *
1975 Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *lenp)
1976 {
1977     U8 * first_variant;
1978
1979     PERL_ARGS_ASSERT_UTF8_TO_BYTES;
1980     PERL_UNUSED_CONTEXT;
1981
1982     /* This is a no-op if no variants at all in the input */
1983     if (is_utf8_invariant_string_loc(s, *lenp, (const U8 **) &first_variant)) {
1984         return s;
1985     }
1986
1987     {
1988         U8 * const save = s;
1989         U8 * const send = s + *lenp;
1990         U8 * d;
1991
1992         /* Nothing before the first variant needs to be changed, so start the real
1993          * work there */
1994         s = first_variant;
1995         while (s < send) {
1996             if (! UTF8_IS_INVARIANT(*s)) {
1997                 if (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(s, send)) {
1998                     *lenp = ((STRLEN) -1);
1999                     return 0;
2000                 }
2001                 s++;
2002             }
2003             s++;
2004         }
2005
2006         /* Is downgradable, so do it */
2007         d = s = first_variant;
2008         while (s < send) {
2009             U8 c = *s++;
2010             if (! UVCHR_IS_INVARIANT(c)) {
2011                 /* Then it is two-byte encoded */
2012                 c = EIGHT_BIT_UTF8_TO_NATIVE(c, *s);
2013                 s++;
2014             }
2015             *d++ = c;
2016         }
2017         *d = '\0';
2018         *lenp = d - save;
2019
2020         return save;
2021     }
2022 }
2023
2024 /*
2025 =for apidoc bytes_from_utf8
2026
2027 Converts a potentially UTF-8 encoded string C<s> of length C<*lenp> into native
2028 byte encoding.  On input, the boolean C<*is_utf8p> gives whether or not C<s> is
2029 actually encoded in UTF-8.
2030
2031 Unlike L</utf8_to_bytes> but like L</bytes_to_utf8>, this is non-destructive of
2032 the input string.
2033
2034 Do nothing if C<*is_utf8p> is 0, or if there are code points in the string
2035 not expressible in native byte encoding.  In these cases, C<*is_utf8p> and
2036 C<*lenp> are unchanged, and the return value is the original C<s>.
2037
2038 Otherwise, C<*is_utf8p> is set to 0, and the return value is a pointer to a
2039 newly created string containing a downgraded copy of C<s>, and whose length is
2040 returned in C<*lenp>, updated.  The new string is C<NUL>-terminated.
2041
2042 Upon successful return, the number of variants in the string can be computed by
2043 having saved the value of C<*lenp> before the call, and subtracting the
2044 after-call value of C<*lenp> from it.
2045
2046 =cut
2047
2048 There is a macro that avoids this function call, but this is retained for
2049 anyone who calls it with the Perl_ prefix */
2050
2051 U8 *
2052 Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8p)
2053 {
2054     PERL_ARGS_ASSERT_BYTES_FROM_UTF8;
2055     PERL_UNUSED_CONTEXT;
2056
2057     return bytes_from_utf8_loc(s, lenp, is_utf8p, NULL);
2058 }
2059
2060 /*
2061 No = here because currently externally undocumented
2062 for apidoc bytes_from_utf8_loc
2063
2064 Like C<L</bytes_from_utf8>()>, but takes an extra parameter, a pointer to where
2065 to store the location of the first character in C<"s"> that cannot be
2066 converted to non-UTF8.
2067
2068 If that parameter is C<NULL>, this function behaves identically to
2069 C<bytes_from_utf8>.
2070
2071 Otherwise if C<*is_utf8p> is 0 on input, the function behaves identically to
2072 C<bytes_from_utf8>, except it also sets C<*first_non_downgradable> to C<NULL>.
2073
2074 Otherwise, the function returns a newly created C<NUL>-terminated string
2075 containing the non-UTF8 equivalent of the convertible first portion of
2076 C<"s">.  C<*lenp> is set to its length, not including the terminating C<NUL>.
2077 If the entire input string was converted, C<*is_utf8p> is set to a FALSE value,
2078 and C<*first_non_downgradable> is set to C<NULL>.
2079
2080 Otherwise, C<*first_non_downgradable> set to point to the first byte of the
2081 first character in the original string that wasn't converted.  C<*is_utf8p> is
2082 unchanged.  Note that the new string may have length 0.
2083
2084 Another way to look at it is, if C<*first_non_downgradable> is non-C<NULL> and
2085 C<*is_utf8p> is TRUE, this function starts at the beginning of C<"s"> and
2086 converts as many characters in it as possible stopping at the first one it
2087 finds that can't be converted to non-UTF-8.  C<*first_non_downgradable> is
2088 set to point to that.  The function returns the portion that could be converted
2089 in a newly created C<NUL>-terminated string, and C<*lenp> is set to its length,
2090 not including the terminating C<NUL>.  If the very first character in the
2091 original could not be converted, C<*lenp> will be 0, and the new string will
2092 contain just a single C<NUL>.  If the entire input string was converted,
2093 C<*is_utf8p> is set to FALSE and C<*first_non_downgradable> is set to C<NULL>.
2094
2095 Upon successful return, the number of variants in the converted portion of the
2096 string can be computed by having saved the value of C<*lenp> before the call,
2097 and subtracting the after-call value of C<*lenp> from it.
2098
2099 =cut
2100
2101
2102 */
2103
2104 U8 *
2105 Perl_bytes_from_utf8_loc(const U8 *s, STRLEN *lenp, bool *is_utf8p, const U8** first_unconverted)
2106 {
2107     U8 *d;
2108     const U8 *original = s;
2109     U8 *converted_start;
2110     const U8 *send = s + *lenp;
2111
2112     PERL_ARGS_ASSERT_BYTES_FROM_UTF8_LOC;
2113
2114     if (! *is_utf8p) {
2115         if (first_unconverted) {
2116             *first_unconverted = NULL;
2117         }
2118
2119         return (U8 *) original;
2120     }
2121
2122     Newx(d, (*lenp) + 1, U8);
2123
2124     converted_start = d;
2125     while (s < send) {
2126         U8 c = *s++;
2127         if (! UTF8_IS_INVARIANT(c)) {
2128
2129             /* Then it is multi-byte encoded.  If the code point is above 0xFF,
2130              * have to stop now */
2131             if (UNLIKELY (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(s - 1, send))) {
2132                 if (first_unconverted) {
2133                     *first_unconverted = s - 1;
2134                     goto finish_and_return;
2135                 }
2136                 else {
2137                     Safefree(converted_start);
2138                     return (U8 *) original;
2139                 }
2140             }
2141
2142             c = EIGHT_BIT_UTF8_TO_NATIVE(c, *s);
2143             s++;
2144         }
2145         *d++ = c;
2146     }
2147
2148     /* Here, converted the whole of the input */
2149     *is_utf8p = FALSE;
2150     if (first_unconverted) {
2151         *first_unconverted = NULL;
2152     }
2153
2154   finish_and_return:
2155         *d = '\0';
2156         *lenp = d - converted_start;
2157
2158     /* Trim unused space */
2159     Renew(converted_start, *lenp + 1, U8);
2160
2161     return converted_start;
2162 }
2163
2164 /*
2165 =for apidoc bytes_to_utf8
2166
2167 Converts a string C<s> of length C<*lenp> bytes from the native encoding into
2168 UTF-8.
2169 Returns a pointer to the newly-created string, and sets C<*lenp> to
2170 reflect the new length in bytes.
2171
2172 Upon successful return, the number of variants in the string can be computed by
2173 having saved the value of C<*lenp> before the call, and subtracting it from the
2174 after-call value of C<*lenp>.
2175
2176 A C<NUL> character will be written after the end of the string.
2177
2178 If you want to convert to UTF-8 from encodings other than
2179 the native (Latin1 or EBCDIC),
2180 see L</sv_recode_to_utf8>().
2181
2182 =cut
2183 */
2184
2185 U8*
2186 Perl_bytes_to_utf8(pTHX_ const U8 *s, STRLEN *lenp)
2187 {
2188     const U8 * const send = s + (*lenp);
2189     U8 *d;
2190     U8 *dst;
2191
2192     PERL_ARGS_ASSERT_BYTES_TO_UTF8;
2193     PERL_UNUSED_CONTEXT;
2194
2195     Newx(d, (*lenp) * 2 + 1, U8);
2196     dst = d;
2197
2198     while (s < send) {
2199         append_utf8_from_native_byte(*s, &d);
2200         s++;
2201     }
2202     *d = '\0';
2203     *lenp = d-dst;
2204     return dst;
2205 }
2206
2207 /*
2208  * Convert native (big-endian) or reversed (little-endian) UTF-16 to UTF-8.
2209  *
2210  * Destination must be pre-extended to 3/2 source.  Do not use in-place.
2211  * We optimize for native, for obvious reasons. */
2212
2213 U8*
2214 Perl_utf16_to_utf8(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
2215 {
2216     U8* pend;
2217     U8* dstart = d;
2218
2219     PERL_ARGS_ASSERT_UTF16_TO_UTF8;
2220
2221     if (bytelen & 1)
2222         Perl_croak(aTHX_ "panic: utf16_to_utf8: odd bytelen %" UVuf,
2223                                                                (UV)bytelen);
2224
2225     pend = p + bytelen;
2226
2227     while (p < pend) {
2228         UV uv = (p[0] << 8) + p[1]; /* UTF-16BE */
2229         p += 2;
2230         if (OFFUNI_IS_INVARIANT(uv)) {
2231             *d++ = LATIN1_TO_NATIVE((U8) uv);
2232             continue;
2233         }
2234         if (uv <= MAX_UTF8_TWO_BYTE) {
2235             *d++ = UTF8_TWO_BYTE_HI(UNI_TO_NATIVE(uv));
2236             *d++ = UTF8_TWO_BYTE_LO(UNI_TO_NATIVE(uv));
2237             continue;
2238         }
2239 #define FIRST_HIGH_SURROGATE UNICODE_SURROGATE_FIRST
2240 #define LAST_HIGH_SURROGATE  0xDBFF
2241 #define FIRST_LOW_SURROGATE  0xDC00
2242 #define LAST_LOW_SURROGATE   UNICODE_SURROGATE_LAST
2243
2244         /* This assumes that most uses will be in the first Unicode plane, not
2245          * needing surrogates */
2246         if (UNLIKELY(uv >= UNICODE_SURROGATE_FIRST
2247                   && uv <= UNICODE_SURROGATE_LAST))
2248         {
2249             if (UNLIKELY(p >= pend) || UNLIKELY(uv > LAST_HIGH_SURROGATE)) {
2250                 Perl_croak(aTHX_ "Malformed UTF-16 surrogate");
2251             }
2252             else {
2253                 UV low = (p[0] << 8) + p[1];
2254                 if (   UNLIKELY(low < FIRST_LOW_SURROGATE)
2255                     || UNLIKELY(low > LAST_LOW_SURROGATE))
2256                 {
2257                     Perl_croak(aTHX_ "Malformed UTF-16 surrogate");
2258                 }
2259                 p += 2;
2260                 uv = ((uv - FIRST_HIGH_SURROGATE) << 10)
2261                                        + (low - FIRST_LOW_SURROGATE) + 0x10000;
2262             }
2263         }
2264 #ifdef EBCDIC
2265         d = uvoffuni_to_utf8_flags(d, uv, 0);
2266 #else
2267         if (uv < 0x10000) {
2268             *d++ = (U8)(( uv >> 12)         | 0xe0);
2269             *d++ = (U8)(((uv >>  6) & 0x3f) | 0x80);
2270             *d++ = (U8)(( uv        & 0x3f) | 0x80);
2271             continue;
2272         }
2273         else {
2274             *d++ = (U8)(( uv >> 18)         | 0xf0);
2275             *d++ = (U8)(((uv >> 12) & 0x3f) | 0x80);
2276             *d++ = (U8)(((uv >>  6) & 0x3f) | 0x80);
2277             *d++ = (U8)(( uv        & 0x3f) | 0x80);
2278             continue;
2279         }
2280 #endif
2281     }
2282     *newlen = d - dstart;
2283     return d;
2284 }
2285
2286 /* Note: this one is slightly destructive of the source. */
2287
2288 U8*
2289 Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
2290 {
2291     U8* s = (U8*)p;
2292     U8* const send = s + bytelen;
2293
2294     PERL_ARGS_ASSERT_UTF16_TO_UTF8_REVERSED;
2295
2296     if (bytelen & 1)
2297         Perl_croak(aTHX_ "panic: utf16_to_utf8_reversed: odd bytelen %" UVuf,
2298                    (UV)bytelen);
2299
2300     while (s < send) {
2301         const U8 tmp = s[0];
2302         s[0] = s[1];
2303         s[1] = tmp;
2304         s += 2;
2305     }
2306     return utf16_to_utf8(p, d, bytelen, newlen);
2307 }
2308
2309 bool
2310 Perl__is_uni_FOO(pTHX_ const U8 classnum, const UV c)
2311 {
2312     U8 tmpbuf[UTF8_MAXBYTES+1];
2313     uvchr_to_utf8(tmpbuf, c);
2314     return _is_utf8_FOO_with_len(classnum, tmpbuf, tmpbuf + sizeof(tmpbuf));
2315 }
2316
2317 /* Internal function so we can deprecate the external one, and call
2318    this one from other deprecated functions in this file */
2319
2320 bool
2321 Perl__is_utf8_idstart(pTHX_ const U8 *p)
2322 {
2323     PERL_ARGS_ASSERT__IS_UTF8_IDSTART;
2324
2325     if (*p == '_')
2326         return TRUE;
2327     return is_utf8_common(p, &PL_utf8_idstart, "IdStart", NULL);
2328 }
2329
2330 bool
2331 Perl__is_uni_perl_idcont(pTHX_ UV c)
2332 {
2333     U8 tmpbuf[UTF8_MAXBYTES+1];
2334     uvchr_to_utf8(tmpbuf, c);
2335     return _is_utf8_perl_idcont_with_len(tmpbuf, tmpbuf + sizeof(tmpbuf));
2336 }
2337
2338 bool
2339 Perl__is_uni_perl_idstart(pTHX_ UV c)
2340 {
2341     U8 tmpbuf[UTF8_MAXBYTES+1];
2342     uvchr_to_utf8(tmpbuf, c);
2343     return _is_utf8_perl_idstart_with_len(tmpbuf, tmpbuf + sizeof(tmpbuf));
2344 }
2345
2346 UV
2347 Perl__to_upper_title_latin1(pTHX_ const U8 c, U8* p, STRLEN *lenp,
2348                                   const char S_or_s)
2349 {
2350     /* We have the latin1-range values compiled into the core, so just use
2351      * those, converting the result to UTF-8.  The only difference between upper
2352      * and title case in this range is that LATIN_SMALL_LETTER_SHARP_S is
2353      * either "SS" or "Ss".  Which one to use is passed into the routine in
2354      * 'S_or_s' to avoid a test */
2355
2356     UV converted = toUPPER_LATIN1_MOD(c);
2357
2358     PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1;
2359
2360     assert(S_or_s == 'S' || S_or_s == 's');
2361
2362     if (UVCHR_IS_INVARIANT(converted)) { /* No difference between the two for
2363                                              characters in this range */
2364         *p = (U8) converted;
2365         *lenp = 1;
2366         return converted;
2367     }
2368
2369     /* toUPPER_LATIN1_MOD gives the correct results except for three outliers,
2370      * which it maps to one of them, so as to only have to have one check for
2371      * it in the main case */
2372     if (UNLIKELY(converted == LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)) {
2373         switch (c) {
2374             case LATIN_SMALL_LETTER_Y_WITH_DIAERESIS:
2375                 converted = LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS;
2376                 break;
2377             case MICRO_SIGN:
2378                 converted = GREEK_CAPITAL_LETTER_MU;
2379                 break;
2380 #if    UNICODE_MAJOR_VERSION > 2                                        \
2381    || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1           \
2382                                   && UNICODE_DOT_DOT_VERSION >= 8)
2383             case LATIN_SMALL_LETTER_SHARP_S:
2384                 *(p)++ = 'S';
2385                 *p = S_or_s;
2386                 *lenp = 2;
2387                 return 'S';
2388 #endif
2389             default:
2390                 Perl_croak(aTHX_ "panic: to_upper_title_latin1 did not expect"
2391                                  " '%c' to map to '%c'",
2392                                  c, LATIN_SMALL_LETTER_Y_WITH_DIAERESIS);
2393                 NOT_REACHED; /* NOTREACHED */
2394         }
2395     }
2396
2397     *(p)++ = UTF8_TWO_BYTE_HI(converted);
2398     *p = UTF8_TWO_BYTE_LO(converted);
2399     *lenp = 2;
2400
2401     return converted;
2402 }
2403
2404 /* Call the function to convert a UTF-8 encoded character to the specified case.
2405  * Note that there may be more than one character in the result.
2406  * INP is a pointer to the first byte of the input character
2407  * OUTP will be set to the first byte of the string of changed characters.  It
2408  *      needs to have space for UTF8_MAXBYTES_CASE+1 bytes
2409  * LENP will be set to the length in bytes of the string of changed characters
2410  *
2411  * The functions return the ordinal of the first character in the string of
2412  * OUTP */
2413 #define CALL_UPPER_CASE(uv, s, d, lenp)                                     \
2414                 _to_utf8_case(uv, s, d, lenp, &PL_utf8_toupper, "ToUc", "")
2415 #define CALL_TITLE_CASE(uv, s, d, lenp)                                     \
2416                 _to_utf8_case(uv, s, d, lenp, &PL_utf8_totitle, "ToTc", "")
2417 #define CALL_LOWER_CASE(uv, s, d, lenp)                                     \
2418                 _to_utf8_case(uv, s, d, lenp, &PL_utf8_tolower, "ToLc", "")
2419
2420 /* This additionally has the input parameter 'specials', which if non-zero will
2421  * cause this to use the specials hash for folding (meaning get full case
2422  * folding); otherwise, when zero, this implies a simple case fold */
2423 #define CALL_FOLD_CASE(uv, s, d, lenp, specials)                            \
2424 _to_utf8_case(uv, s, d, lenp, &PL_utf8_tofold, "ToCf", (specials) ? "" : NULL)
2425
2426 UV
2427 Perl_to_uni_upper(pTHX_ UV c, U8* p, STRLEN *lenp)
2428 {
2429     /* Convert the Unicode character whose ordinal is <c> to its uppercase
2430      * version and store that in UTF-8 in <p> and its length in bytes in <lenp>.
2431      * Note that the <p> needs to be at least UTF8_MAXBYTES_CASE+1 bytes since
2432      * the changed version may be longer than the original character.
2433      *
2434      * The ordinal of the first character of the changed version is returned
2435      * (but note, as explained above, that there may be more.) */
2436
2437     PERL_ARGS_ASSERT_TO_UNI_UPPER;
2438
2439     if (c < 256) {
2440         return _to_upper_title_latin1((U8) c, p, lenp, 'S');
2441     }
2442
2443     uvchr_to_utf8(p, c);
2444     return CALL_UPPER_CASE(c, p, p, lenp);
2445 }
2446
2447 UV
2448 Perl_to_uni_title(pTHX_ UV c, U8* p, STRLEN *lenp)
2449 {
2450     PERL_ARGS_ASSERT_TO_UNI_TITLE;
2451
2452     if (c < 256) {
2453         return _to_upper_title_latin1((U8) c, p, lenp, 's');
2454     }
2455
2456     uvchr_to_utf8(p, c);
2457     return CALL_TITLE_CASE(c, p, p, lenp);
2458 }
2459
2460 STATIC U8
2461 S_to_lower_latin1(const U8 c, U8* p, STRLEN *lenp, const char dummy)
2462 {
2463     /* We have the latin1-range values compiled into the core, so just use
2464      * those, converting the result to UTF-8.  Since the result is always just
2465      * one character, we allow <p> to be NULL */
2466
2467     U8 converted = toLOWER_LATIN1(c);
2468
2469     PERL_UNUSED_ARG(dummy);
2470
2471     if (p != NULL) {
2472         if (NATIVE_BYTE_IS_INVARIANT(converted)) {
2473             *p = converted;
2474             *lenp = 1;
2475         }
2476         else {
2477             /* Result is known to always be < 256, so can use the EIGHT_BIT
2478              * macros */
2479             *p = UTF8_EIGHT_BIT_HI(converted);
2480             *(p+1) = UTF8_EIGHT_BIT_LO(converted);
2481             *lenp = 2;
2482         }
2483     }
2484     return converted;
2485 }
2486
2487 UV
2488 Perl_to_uni_lower(pTHX_ UV c, U8* p, STRLEN *lenp)
2489 {
2490     PERL_ARGS_ASSERT_TO_UNI_LOWER;
2491
2492     if (c < 256) {
2493         return to_lower_latin1((U8) c, p, lenp, 0 /* 0 is a dummy arg */ );
2494     }
2495
2496     uvchr_to_utf8(p, c);
2497     return CALL_LOWER_CASE(c, p, p, lenp);
2498 }
2499
2500 UV
2501 Perl__to_fold_latin1(pTHX_ const U8 c, U8* p, STRLEN *lenp,
2502                            const unsigned int flags)
2503 {
2504     /* Corresponds to to_lower_latin1(); <flags> bits meanings:
2505      *      FOLD_FLAGS_NOMIX_ASCII iff non-ASCII to ASCII folds are prohibited
2506      *      FOLD_FLAGS_FULL  iff full folding is to be used;
2507      *
2508      *  Not to be used for locale folds
2509      */
2510
2511     UV converted;
2512
2513     PERL_ARGS_ASSERT__TO_FOLD_LATIN1;
2514     PERL_UNUSED_CONTEXT;
2515
2516     assert (! (flags & FOLD_FLAGS_LOCALE));
2517
2518     if (UNLIKELY(c == MICRO_SIGN)) {
2519         converted = GREEK_SMALL_LETTER_MU;
2520     }
2521 #if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
2522    || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
2523                                       || UNICODE_DOT_DOT_VERSION > 0)
2524     else if (   (flags & FOLD_FLAGS_FULL)
2525              && UNLIKELY(c == LATIN_SMALL_LETTER_SHARP_S))
2526     {
2527         /* If can't cross 127/128 boundary, can't return "ss"; instead return
2528          * two U+017F characters, as fc("\df") should eq fc("\x{17f}\x{17f}")
2529          * under those circumstances. */
2530         if (flags & FOLD_FLAGS_NOMIX_ASCII) {
2531             *lenp = 2 * sizeof(LATIN_SMALL_LETTER_LONG_S_UTF8) - 2;
2532             Copy(LATIN_SMALL_LETTER_LONG_S_UTF8 LATIN_SMALL_LETTER_LONG_S_UTF8,
2533                  p, *lenp, U8);
2534             return LATIN_SMALL_LETTER_LONG_S;
2535         }
2536         else {
2537             *(p)++ = 's';
2538             *p = 's';
2539             *lenp = 2;
2540             return 's';
2541         }
2542     }
2543 #endif
2544     else { /* In this range the fold of all other characters is their lower
2545               case */
2546         converted = toLOWER_LATIN1(c);
2547     }
2548
2549     if (UVCHR_IS_INVARIANT(converted)) {
2550         *p = (U8) converted;
2551         *lenp = 1;
2552     }
2553     else {
2554         *(p)++ = UTF8_TWO_BYTE_HI(converted);
2555         *p = UTF8_TWO_BYTE_LO(converted);
2556         *lenp = 2;
2557     }
2558
2559     return converted;
2560 }
2561
2562 UV
2563 Perl__to_uni_fold_flags(pTHX_ UV c, U8* p, STRLEN *lenp, U8 flags)
2564 {
2565
2566     /* Not currently externally documented, and subject to change
2567      *  <flags> bits meanings:
2568      *      FOLD_FLAGS_FULL  iff full folding is to be used;
2569      *      FOLD_FLAGS_LOCALE is set iff the rules from the current underlying
2570      *                        locale are to be used.
2571      *      FOLD_FLAGS_NOMIX_ASCII iff non-ASCII to ASCII folds are prohibited
2572      */
2573
2574     PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS;
2575
2576     if (flags & FOLD_FLAGS_LOCALE) {
2577         /* Treat a UTF-8 locale as not being in locale at all */
2578         if (IN_UTF8_CTYPE_LOCALE) {
2579             flags &= ~FOLD_FLAGS_LOCALE;
2580         }
2581         else {
2582             _CHECK_AND_WARN_PROBLEMATIC_LOCALE;
2583             goto needs_full_generality;
2584         }
2585     }
2586
2587     if (c < 256) {
2588         return _to_fold_latin1((U8) c, p, lenp,
2589                             flags & (FOLD_FLAGS_FULL | FOLD_FLAGS_NOMIX_ASCII));
2590     }
2591
2592     /* Here, above 255.  If no special needs, just use the macro */
2593     if ( ! (flags & (FOLD_FLAGS_LOCALE|FOLD_FLAGS_NOMIX_ASCII))) {
2594         uvchr_to_utf8(p, c);
2595         return CALL_FOLD_CASE(c, p, p, lenp, flags & FOLD_FLAGS_FULL);
2596     }
2597     else {  /* Otherwise, _toFOLD_utf8_flags has the intelligence to deal with
2598                the special flags. */
2599         U8 utf8_c[UTF8_MAXBYTES + 1];
2600
2601       needs_full_generality:
2602         uvchr_to_utf8(utf8_c, c);
2603         return _toFOLD_utf8_flags(utf8_c, utf8_c + sizeof(utf8_c),
2604                                   p, lenp, flags);
2605     }
2606 }
2607
2608 PERL_STATIC_INLINE bool
2609 S_is_utf8_common(pTHX_ const U8 *const p, SV **swash,
2610                  const char *const swashname, SV* const invlist)
2611 {
2612     /* returns a boolean giving whether or not the UTF8-encoded character that
2613      * starts at <p> is in the swash indicated by <swashname>.  <swash>
2614      * contains a pointer to where the swash indicated by <swashname>
2615      * is to be stored; which this routine will do, so that future calls will
2616      * look at <*swash> and only generate a swash if it is not null.  <invlist>
2617      * is NULL or an inversion list that defines the swash.  If not null, it
2618      * saves time during initialization of the swash.
2619      *
2620      * Note that it is assumed that the buffer length of <p> is enough to
2621      * contain all the bytes that comprise the character.  Thus, <*p> should
2622      * have been checked before this call for mal-formedness enough to assure
2623      * that. */
2624
2625     PERL_ARGS_ASSERT_IS_UTF8_COMMON;
2626
2627     /* The API should have included a length for the UTF-8 character in <p>,
2628      * but it doesn't.  We therefore assume that p has been validated at least
2629      * as far as there being enough bytes available in it to accommodate the
2630      * character without reading beyond the end, and pass that number on to the
2631      * validating routine */
2632     if (! isUTF8_CHAR(p, p + UTF8SKIP(p))) {
2633         _force_out_malformed_utf8_message(p, p + UTF8SKIP(p),
2634                                           _UTF8_NO_CONFIDENCE_IN_CURLEN,
2635                                           1 /* Die */ );
2636         NOT_REACHED; /* NOTREACHED */
2637     }
2638
2639     if (!*swash) {
2640         U8 flags = _CORE_SWASH_INIT_ACCEPT_INVLIST;
2641         *swash = _core_swash_init("utf8",
2642
2643                                   /* Only use the name if there is no inversion
2644                                    * list; otherwise will go out to disk */
2645                                   (invlist) ? "" : swashname,
2646
2647                                   &PL_sv_undef, 1, 0, invlist, &flags);
2648     }
2649
2650     return swash_fetch(*swash, p, TRUE) != 0;
2651 }
2652
2653 PERL_STATIC_INLINE bool
2654 S_is_utf8_common_with_len(pTHX_ const U8 *const p, const U8 * const e,
2655                           SV **swash, const char *const swashname,
2656                           SV* const invlist)
2657 {
2658     /* returns a boolean giving whether or not the UTF8-encoded character that
2659      * starts at <p>, and extending no further than <e - 1> is in the swash
2660      * indicated by <swashname>.  <swash> contains a pointer to where the swash
2661      * indicated by <swashname> is to be stored; which this routine will do, so
2662      * that future calls will look at <*swash> and only generate a swash if it
2663      * is not null.  <invlist> is NULL or an inversion list that defines the
2664      * swash.  If not null, it saves time during initialization of the swash.
2665      */
2666
2667     PERL_ARGS_ASSERT_IS_UTF8_COMMON_WITH_LEN;
2668
2669     if (! isUTF8_CHAR(p, e)) {
2670         _force_out_malformed_utf8_message(p, e, 0, 1);
2671         NOT_REACHED; /* NOTREACHED */
2672     }
2673
2674     if (!*swash) {
2675         U8 flags = _CORE_SWASH_INIT_ACCEPT_INVLIST;
2676         *swash = _core_swash_init("utf8",
2677
2678                                   /* Only use the name if there is no inversion
2679                                    * list; otherwise will go out to disk */
2680                                   (invlist) ? "" : swashname,
2681
2682                                   &PL_sv_undef, 1, 0, invlist, &flags);
2683     }
2684
2685     return swash_fetch(*swash, p, TRUE) != 0;
2686 }
2687
2688 STATIC void
2689 S_warn_on_first_deprecated_use(pTHX_ const char * const name,
2690                                      const char * const alternative,
2691                                      const bool use_locale,
2692                                      const char * const file,
2693                                      const unsigned line)
2694 {
2695     const char * key;
2696
2697     PERL_ARGS_ASSERT_WARN_ON_FIRST_DEPRECATED_USE;
2698
2699     if (ckWARN_d(WARN_DEPRECATED)) {
2700
2701         key = Perl_form(aTHX_ "%s;%d;%s;%d", name, use_locale, file, line);
2702         if (! hv_fetch(PL_seen_deprecated_macro, key, strlen(key), 0)) {
2703             if (! PL_seen_deprecated_macro) {
2704                 PL_seen_deprecated_macro = newHV();
2705             }
2706             if (! hv_store(PL_seen_deprecated_macro, key,
2707                            strlen(key), &PL_sv_undef, 0))
2708             {
2709                 Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
2710             }
2711
2712             if (instr(file, "mathoms.c")) {
2713                 Perl_warner(aTHX_ WARN_DEPRECATED,
2714                             "In %s, line %d, starting in Perl v5.30, %s()"
2715                             " will be removed.  Avoid this message by"
2716                             " converting to use %s().\n",
2717                             file, line, name, alternative);
2718             }
2719             else {
2720                 Perl_warner(aTHX_ WARN_DEPRECATED,
2721                             "In %s, line %d, starting in Perl v5.30, %s() will"
2722                             " require an additional parameter.  Avoid this"
2723                             " message by converting to use %s().\n",
2724                             file, line, name, alternative);
2725             }
2726         }
2727     }
2728 }
2729
2730 bool
2731 Perl__is_utf8_FOO(pTHX_       U8   classnum,
2732                         const U8   * const p,
2733                         const char * const name,
2734                         const char * const alternative,
2735                         const bool use_utf8,
2736                         const bool use_locale,
2737                         const char * const file,
2738                         const unsigned line)
2739 {
2740     PERL_ARGS_ASSERT__IS_UTF8_FOO;
2741
2742     warn_on_first_deprecated_use(name, alternative, use_locale, file, line);
2743
2744     if (use_utf8 && UTF8_IS_ABOVE_LATIN1(*p)) {
2745
2746         switch (classnum) {
2747             case _CC_WORDCHAR:
2748             case _CC_DIGIT:
2749             case _CC_ALPHA:
2750             case _CC_LOWER:
2751             case _CC_UPPER:
2752             case _CC_PUNCT:
2753             case _CC_PRINT:
2754             case _CC_ALPHANUMERIC:
2755             case _CC_GRAPH:
2756             case _CC_CASED:
2757
2758                 return is_utf8_common(p,
2759                                       &PL_utf8_swash_ptrs[classnum],
2760                                       swash_property_names[classnum],
2761                                       PL_XPosix_ptrs[classnum]);
2762
2763             case _CC_SPACE:
2764                 return is_XPERLSPACE_high(p);
2765             case _CC_BLANK:
2766                 return is_HORIZWS_high(p);
2767             case _CC_XDIGIT:
2768                 return is_XDIGIT_high(p);
2769             case _CC_CNTRL:
2770                 return 0;
2771             case _CC_ASCII:
2772                 return 0;
2773             case _CC_VERTSPACE:
2774                 return is_VERTWS_high(p);
2775             case _CC_IDFIRST:
2776                 if (! PL_utf8_perl_idstart) {
2777                     PL_utf8_perl_idstart
2778                                 = _new_invlist_C_array(_Perl_IDStart_invlist);
2779                 }
2780                 return is_utf8_common(p, &PL_utf8_perl_idstart,
2781                                       "_Perl_IDStart", NULL);
2782             case _CC_IDCONT:
2783                 if (! PL_utf8_perl_idcont) {
2784                     PL_utf8_perl_idcont
2785                                 = _new_invlist_C_array(_Perl_IDCont_invlist);
2786                 }
2787                 return is_utf8_common(p, &PL_utf8_perl_idcont,
2788                                       "_Perl_IDCont", NULL);
2789         }
2790     }
2791
2792     /* idcont is the same as wordchar below 256 */
2793     if (classnum == _CC_IDCONT) {
2794         classnum = _CC_WORDCHAR;
2795     }
2796     else if (classnum == _CC_IDFIRST) {
2797         if (*p == '_') {
2798             return TRUE;
2799         }
2800         classnum = _CC_ALPHA;
2801     }
2802
2803     if (! use_locale) {
2804         if (! use_utf8 || UTF8_IS_INVARIANT(*p)) {
2805             return _generic_isCC(*p, classnum);
2806         }
2807
2808         return _generic_isCC(EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p + 1 )), classnum);
2809     }
2810     else {
2811         if (! use_utf8 || UTF8_IS_INVARIANT(*p)) {
2812             return isFOO_lc(classnum, *p);
2813         }
2814
2815         return isFOO_lc(classnum, EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p + 1 )));
2816     }
2817
2818     NOT_REACHED; /* NOTREACHED */
2819 }
2820
2821 bool
2822 Perl__is_utf8_FOO_with_len(pTHX_ const U8 classnum, const U8 *p,
2823                                                             const U8 * const e)
2824 {
2825     PERL_ARGS_ASSERT__IS_UTF8_FOO_WITH_LEN;
2826
2827     assert(classnum < _FIRST_NON_SWASH_CC);
2828
2829     return is_utf8_common_with_len(p,
2830                                    e,
2831                                    &PL_utf8_swash_ptrs[classnum],
2832                                    swash_property_names[classnum],
2833                                    PL_XPosix_ptrs[classnum]);
2834 }
2835
2836 bool
2837 Perl__is_utf8_perl_idstart_with_len(pTHX_ const U8 *p, const U8 * const e)
2838 {
2839     SV* invlist = NULL;
2840
2841     PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART_WITH_LEN;
2842
2843     if (! PL_utf8_perl_idstart) {
2844         invlist = _new_invlist_C_array(_Perl_IDStart_invlist);
2845     }
2846     return is_utf8_common_with_len(p, e, &PL_utf8_perl_idstart,
2847                                       "_Perl_IDStart", invlist);
2848 }
2849
2850 bool
2851 Perl__is_utf8_xidstart(pTHX_ const U8 *p)
2852 {
2853     PERL_ARGS_ASSERT__IS_UTF8_XIDSTART;
2854
2855     if (*p == '_')
2856         return TRUE;
2857     return is_utf8_common(p, &PL_utf8_xidstart, "XIdStart", NULL);
2858 }
2859
2860 bool
2861 Perl__is_utf8_perl_idcont_with_len(pTHX_ const U8 *p, const U8 * const e)
2862 {
2863     SV* invlist = NULL;
2864
2865     PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT_WITH_LEN;
2866
2867     if (! PL_utf8_perl_idcont) {
2868         invlist = _new_invlist_C_array(_Perl_IDCont_invlist);
2869     }
2870     return is_utf8_common_with_len(p, e, &PL_utf8_perl_idcont,
2871                                    "_Perl_IDCont", invlist);
2872 }
2873
2874 bool
2875 Perl__is_utf8_idcont(pTHX_ const U8 *p)
2876 {
2877     PERL_ARGS_ASSERT__IS_UTF8_IDCONT;
2878
2879     return is_utf8_common(p, &PL_utf8_idcont, "IdContinue", NULL);
2880 }
2881
2882 bool
2883 Perl__is_utf8_xidcont(pTHX_ const U8 *p)
2884 {
2885     PERL_ARGS_ASSERT__IS_UTF8_XIDCONT;
2886
2887     return is_utf8_common(p, &PL_utf8_idcont, "XIdContinue", NULL);
2888 }
2889
2890 bool
2891 Perl__is_utf8_mark(pTHX_ const U8 *p)
2892 {
2893     PERL_ARGS_ASSERT__IS_UTF8_MARK;
2894
2895     return is_utf8_common(p, &PL_utf8_mark, "IsM", NULL);
2896 }
2897
2898     /* change namve uv1 to 'from' */
2899 STATIC UV
2900 S__to_utf8_case(pTHX_ const UV uv1, const U8 *p, U8* ustrp, STRLEN *lenp,
2901                 SV **swashp, const char *normal, const char *special)
2902 {
2903     STRLEN len = 0;
2904
2905     PERL_ARGS_ASSERT__TO_UTF8_CASE;
2906
2907     /* For code points that don't change case, we already know that the output
2908      * of this function is the unchanged input, so we can skip doing look-ups
2909      * for them.  Unfortunately the case-changing code points are scattered
2910      * around.  But there are some long consecutive ranges where there are no
2911      * case changing code points.  By adding tests, we can eliminate the lookup
2912      * for all the ones in such ranges.  This is currently done here only for
2913      * just a few cases where the scripts are in common use in modern commerce
2914      * (and scripts adjacent to those which can be included without additional
2915      * tests). */
2916
2917     if (uv1 >= 0x0590) {
2918         /* This keeps from needing further processing the code points most
2919          * likely to be used in the following non-cased scripts: Hebrew,
2920          * Arabic, Syriac, Thaana, NKo, Samaritan, Mandaic, Devanagari,
2921          * Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada,
2922          * Malayalam, Sinhala, Thai, Lao, Tibetan, Myanmar */
2923         if (uv1 < 0x10A0) {
2924             goto cases_to_self;
2925         }
2926
2927         /* The following largish code point ranges also don't have case
2928          * changes, but khw didn't think they warranted extra tests to speed
2929          * them up (which would slightly slow down everything else above them):
2930          * 1100..139F   Hangul Jamo, Ethiopic
2931          * 1400..1CFF   Unified Canadian Aboriginal Syllabics, Ogham, Runic,
2932          *              Tagalog, Hanunoo, Buhid, Tagbanwa, Khmer, Mongolian,
2933          *              Limbu, Tai Le, New Tai Lue, Buginese, Tai Tham,
2934          *              Combining Diacritical Marks Extended, Balinese,
2935          *              Sundanese, Batak, Lepcha, Ol Chiki
2936          * 2000..206F   General Punctuation
2937          */
2938
2939         if (uv1 >= 0x2D30) {
2940
2941             /* This keeps the from needing further processing the code points
2942              * most likely to be used in the following non-cased major scripts:
2943              * CJK, Katakana, Hiragana, plus some less-likely scripts.
2944              *
2945              * (0x2D30 above might have to be changed to 2F00 in the unlikely
2946              * event that Unicode eventually allocates the unused block as of
2947              * v8.0 2FE0..2FEF to code points that are cased.  khw has verified
2948              * that the test suite will start having failures to alert you
2949              * should that happen) */
2950             if (uv1 < 0xA640) {
2951                 goto cases_to_self;
2952             }
2953
2954             if (uv1 >= 0xAC00) {
2955                 if (UNLIKELY(UNICODE_IS_SURROGATE(uv1))) {
2956                     if (ckWARN_d(WARN_SURROGATE)) {
2957                         const char* desc = (PL_op) ? OP_DESC(PL_op) : normal;
2958                         Perl_warner(aTHX_ packWARN(WARN_SURROGATE),
2959                             "Operation \"%s\" returns its argument for"
2960                             " UTF-16 surrogate U+%04" UVXf, desc, uv1);
2961                     }
2962                     goto cases_to_self;
2963                 }
2964
2965                 /* AC00..FAFF Catches Hangul syllables and private use, plus
2966                  * some others */
2967                 if (uv1 < 0xFB00) {
2968                     goto cases_to_self;
2969
2970                 }
2971
2972                 if (UNLIKELY(UNICODE_IS_SUPER(uv1))) {
2973                     if (   UNLIKELY(uv1 > MAX_NON_DEPRECATED_CP)
2974                         && ckWARN_d(WARN_DEPRECATED))
2975                     {
2976                         Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
2977                                 cp_above_legal_max, uv1, MAX_NON_DEPRECATED_CP);
2978                     }
2979                     if (ckWARN_d(WARN_NON_UNICODE)) {
2980                         const char* desc = (PL_op) ? OP_DESC(PL_op) : normal;
2981                         Perl_warner(aTHX_ packWARN(WARN_NON_UNICODE),
2982                             "Operation \"%s\" returns its argument for"
2983                             " non-Unicode code point 0x%04" UVXf, desc, uv1);
2984                     }
2985                     goto cases_to_self;
2986                 }
2987 #ifdef HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C
2988                 if (UNLIKELY(uv1
2989                     > HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C))
2990                 {
2991
2992                     /* As of Unicode 10.0, this means we avoid swash creation
2993                      * for anything beyond high Plane 1 (below emojis)  */
2994                     goto cases_to_self;
2995                 }
2996 #endif
2997             }
2998         }
2999
3000         /* Note that non-characters are perfectly legal, so no warning should
3001          * be given.  There are so few of them, that it isn't worth the extra
3002          * tests to avoid swash creation */
3003     }
3004
3005     if (!*swashp) /* load on-demand */
3006          *swashp = _core_swash_init("utf8", normal, &PL_sv_undef,
3007                                     4, 0, NULL, NULL);
3008
3009     if (special) {
3010          /* It might be "special" (sometimes, but not always,
3011           * a multicharacter mapping) */
3012          HV *hv = NULL;
3013          SV **svp;
3014
3015          /* If passed in the specials name, use that; otherwise use any
3016           * given in the swash */
3017          if (*special != '\0') {
3018             hv = get_hv(special, 0);
3019         }
3020         else {
3021             svp = hv_fetchs(MUTABLE_HV(SvRV(*swashp)), "SPECIALS", 0);
3022             if (svp) {
3023                 hv = MUTABLE_HV(SvRV(*svp));
3024             }
3025         }
3026
3027          if (hv
3028              && (svp = hv_fetch(hv, (const char*)p, UVCHR_SKIP(uv1), FALSE))
3029              && (*svp))
3030          {
3031              const char *s;
3032
3033               s = SvPV_const(*svp, len);
3034               if (len == 1)
3035                   /* EIGHTBIT */
3036                    len = uvchr_to_utf8(ustrp, *(U8*)s) - ustrp;
3037               else {
3038                    Copy(s, ustrp, len, U8);
3039               }
3040          }
3041     }
3042
3043     if (!len && *swashp) {
3044         const UV uv2 = swash_fetch(*swashp, p, TRUE /* => is UTF-8 */);
3045
3046          if (uv2) {
3047               /* It was "normal" (a single character mapping). */
3048               len = uvchr_to_utf8(ustrp, uv2) - ustrp;
3049          }
3050     }
3051
3052     if (len) {
3053         if (lenp) {
3054             *lenp = len;
3055         }
3056         return valid_utf8_to_uvchr(ustrp, 0);
3057     }
3058
3059     /* Here, there was no mapping defined, which means that the code point maps
3060      * to itself.  Return the inputs */
3061   cases_to_self:
3062     len = UTF8SKIP(p);
3063     if (p != ustrp) {   /* Don't copy onto itself */
3064         Copy(p, ustrp, len, U8);
3065     }
3066
3067     if (lenp)
3068          *lenp = len;
3069
3070     return uv1;
3071
3072 }
3073
3074 STATIC UV
3075 S_check_locale_boundary_crossing(pTHX_ const U8* const p, const UV result,
3076                                        U8* const ustrp, STRLEN *lenp)
3077 {
3078     /* This is called when changing the case of a UTF-8-encoded character above
3079      * the Latin1 range, and the operation is in a non-UTF-8 locale.  If the
3080      * result contains a character that crosses the 255/256 boundary, disallow
3081      * the change, and return the original code point.  See L<perlfunc/lc> for
3082      * why;
3083      *
3084      * p        points to the original string whose case was changed; assumed
3085      *          by this routine to be well-formed
3086      * result   the code point of the first character in the changed-case string
3087      * ustrp    points to the changed-case string (<result> represents its
3088      *          first char)
3089      * lenp     points to the length of <ustrp> */
3090
3091     UV original;    /* To store the first code point of <p> */
3092
3093     PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING;
3094
3095     assert(UTF8_IS_ABOVE_LATIN1(*p));
3096
3097     /* We know immediately if the first character in the string crosses the
3098      * boundary, so can skip */
3099     if (result > 255) {
3100
3101         /* Look at every character in the result; if any cross the
3102         * boundary, the whole thing is disallowed */
3103         U8* s = ustrp + UTF8SKIP(ustrp);
3104         U8* e = ustrp + *lenp;
3105         while (s < e) {
3106             if (! UTF8_IS_ABOVE_LATIN1(*s)) {
3107                 goto bad_crossing;
3108             }
3109             s += UTF8SKIP(s);
3110         }
3111
3112         /* Here, no characters crossed, result is ok as-is, but we warn. */
3113         _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(p, p + UTF8SKIP(p));
3114         return result;
3115     }
3116
3117   bad_crossing:
3118
3119     /* Failed, have to return the original */
3120     original = valid_utf8_to_uvchr(p, lenp);
3121
3122     /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3123     Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3124                            "Can't do %s(\"\\x{%" UVXf "}\") on non-UTF-8"
3125                            " locale; resolved to \"\\x{%" UVXf "}\".",
3126                            OP_DESC(PL_op),
3127                            original,
3128                            original);
3129     Copy(p, ustrp, *lenp, char);
3130     return original;
3131 }
3132
3133 STATIC U32
3134 S_check_and_deprecate(pTHX_ const U8 *p,
3135                             const U8 **e,
3136                             const unsigned int type,    /* See below */
3137                             const bool use_locale,      /* Is this a 'LC_'
3138                                                            macro call? */
3139                             const char * const file,
3140                             const unsigned line)
3141 {
3142     /* This is a temporary function to deprecate the unsafe calls to the case
3143      * changing macros and functions.  It keeps all the special stuff in just
3144      * one place.
3145      *
3146      * It updates *e with the pointer to the end of the input string.  If using
3147      * the old-style macros, *e is NULL on input, and so this function assumes
3148      * the input string is long enough to hold the entire UTF-8 sequence, and
3149      * sets *e accordingly, but it then returns a flag to pass the
3150      * utf8n_to_uvchr(), to tell it that this size is a guess, and to avoid
3151      * using the full length if possible.
3152      *
3153      * It also does the assert that *e > p when *e is not NULL.  This should be
3154      * migrated to the callers when this function gets deleted.
3155      *
3156      * The 'type' parameter is used for the caller to specify which case
3157      * changing function this is called from: */
3158
3159 #       define DEPRECATE_TO_UPPER 0
3160 #       define DEPRECATE_TO_TITLE 1
3161 #       define DEPRECATE_TO_LOWER 2
3162 #       define DEPRECATE_TO_FOLD  3
3163
3164     U32 utf8n_flags = 0;
3165     const char * name;
3166     const char * alternative;
3167
3168     PERL_ARGS_ASSERT_CHECK_AND_DEPRECATE;
3169
3170     if (*e == NULL) {
3171         utf8n_flags = _UTF8_NO_CONFIDENCE_IN_CURLEN;
3172         *e = p + UTF8SKIP(p);
3173
3174         /* For mathoms.c calls, we use the function name we know is stored
3175          * there.  It could be part of a larger path */
3176         if (type == DEPRECATE_TO_UPPER) {
3177             name = instr(file, "mathoms.c")
3178                    ? "to_utf8_upper"
3179                    : "toUPPER_utf8";
3180             alternative = "toUPPER_utf8_safe";
3181         }
3182         else if (type == DEPRECATE_TO_TITLE) {
3183             name = instr(file, "mathoms.c")
3184                    ? "to_utf8_title"
3185                    : "toTITLE_utf8";
3186             alternative = "toTITLE_utf8_safe";
3187         }
3188         else if (type == DEPRECATE_TO_LOWER) {
3189             name = instr(file, "mathoms.c")
3190                    ? "to_utf8_lower"
3191                    : "toLOWER_utf8";
3192             alternative = "toLOWER_utf8_safe";
3193         }
3194         else if (type == DEPRECATE_TO_FOLD) {
3195             name = instr(file, "mathoms.c")
3196                    ? "to_utf8_fold"
3197                    : "toFOLD_utf8";
3198             alternative = "toFOLD_utf8_safe";
3199         }
3200         else Perl_croak(aTHX_ "panic: Unexpected case change type");
3201
3202         warn_on_first_deprecated_use(name, alternative, use_locale, file, line);
3203     }
3204     else {
3205         assert (p < *e);
3206     }
3207
3208     return utf8n_flags;
3209 }
3210
3211 /* The process for changing the case is essentially the same for the four case
3212  * change types, except there are complications for folding.  Otherwise the
3213  * difference is only which case to change to.  To make sure that they all do
3214  * the same thing, the bodies of the functions are extracted out into the
3215  * following two macros.  The functions are written with the same variable
3216  * names, and these are known and used inside these macros.  It would be
3217  * better, of course, to have inline functions to do it, but since different
3218  * macros are called, depending on which case is being changed to, this is not
3219  * feasible in C (to khw's knowledge).  Two macros are created so that the fold
3220  * function can start with the common start macro, then finish with its special
3221  * handling; while the other three cases can just use the common end macro.
3222  *
3223  * The algorithm is to use the proper (passed in) macro or function to change
3224  * the case for code points that are below 256.  The macro is used if using
3225  * locale rules for the case change; the function if not.  If the code point is
3226  * above 255, it is computed from the input UTF-8, and another macro is called
3227  * to do the conversion.  If necessary, the output is converted to UTF-8.  If
3228  * using a locale, we have to check that the change did not cross the 255/256
3229  * boundary, see check_locale_boundary_crossing() for further details.
3230  *
3231  * The macros are split with the correct case change for the below-256 case
3232  * stored into 'result', and in the middle of an else clause for the above-255
3233  * case.  At that point in the 'else', 'result' is not the final result, but is
3234  * the input code point calculated from the UTF-8.  The fold code needs to
3235  * realize all this and take it from there.
3236  *
3237  * If you read the two macros as sequential, it's easier to understand what's
3238  * going on. */
3239 #define CASE_CHANGE_BODY_START(locale_flags, LC_L1_change_macro, L1_func,    \
3240                                L1_func_extra_param)                          \
3241                                                                              \
3242     if (flags & (locale_flags)) {                                            \
3243         /* Treat a UTF-8 locale as not being in locale at all */             \
3244         if (IN_UTF8_CTYPE_LOCALE) {                                          \
3245             flags &= ~(locale_flags);                                        \
3246         }                                                                    \
3247         else {                                                               \
3248             _CHECK_AND_WARN_PROBLEMATIC_LOCALE;                              \
3249         }                                                                    \
3250     }                                                                        \
3251                                                                              \
3252     if (UTF8_IS_INVARIANT(*p)) {                                             \
3253         if (flags & (locale_flags)) {                                        \
3254             result = LC_L1_change_macro(*p);                                 \
3255         }                                                                    \
3256         else {                                                               \
3257             return L1_func(*p, ustrp, lenp, L1_func_extra_param);            \
3258         }                                                                    \
3259     }                                                                        \
3260     else if UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(p, e) {                          \
3261         if (flags & (locale_flags)) {                                        \
3262             result = LC_L1_change_macro(EIGHT_BIT_UTF8_TO_NATIVE(*p,         \
3263                                                                  *(p+1)));   \
3264         }                                                                    \
3265         else {                                                               \
3266             return L1_func(EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p+1)),             \
3267                            ustrp, lenp,  L1_func_extra_param);               \
3268         }                                                                    \
3269     }                                                                        \
3270     else {  /* malformed UTF-8 or ord above 255 */                           \
3271         STRLEN len_result;                                                   \
3272         result = utf8n_to_uvchr(p, e - p, &len_result, UTF8_CHECK_ONLY);     \
3273         if (len_result == (STRLEN) -1) {                                     \
3274             _force_out_malformed_utf8_message(p, e, utf8n_flags,             \
3275                                                             1 /* Die */ );   \
3276         }
3277
3278 #define CASE_CHANGE_BODY_END(locale_flags, change_macro)                     \
3279         result = change_macro(result, p, ustrp, lenp);                       \
3280                                                                              \
3281         if (flags & (locale_flags)) {                                        \
3282             result = check_locale_boundary_crossing(p, result, ustrp, lenp); \
3283         }                                                                    \
3284         return result;                                                       \
3285     }                                                                        \
3286                                                                              \
3287     /* Here, used locale rules.  Convert back to UTF-8 */                    \
3288     if (UTF8_IS_INVARIANT(result)) {                                         \
3289         *ustrp = (U8) result;                                                \
3290         *lenp = 1;                                                           \
3291     }                                                                        \
3292     else {                                                                   \
3293         *ustrp = UTF8_EIGHT_BIT_HI((U8) result);                             \
3294         *(ustrp + 1) = UTF8_EIGHT_BIT_LO((U8) result);                       \
3295         *lenp = 2;                                                           \
3296     }                                                                        \
3297                                                                              \
3298     return result;
3299
3300 /*
3301 =for apidoc to_utf8_upper
3302
3303 Instead use L</toUPPER_utf8_safe>.
3304
3305 =cut */
3306
3307 /* Not currently externally documented, and subject to change:
3308  * <flags> is set iff iff the rules from the current underlying locale are to
3309  *         be used. */
3310
3311 UV
3312 Perl__to_utf8_upper_flags(pTHX_ const U8 *p,
3313                                 const U8 *e,
3314                                 U8* ustrp,
3315                                 STRLEN *lenp,
3316                                 bool flags,
3317                                 const char * const file,
3318                                 const int line)
3319 {
3320     UV result;
3321     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_UPPER,
3322                                                 cBOOL(flags), file, line);
3323
3324     PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS;
3325
3326     /* ~0 makes anything non-zero in 'flags' mean we are using locale rules */
3327     /* 2nd char of uc(U+DF) is 'S' */
3328     CASE_CHANGE_BODY_START(~0, toUPPER_LC, _to_upper_title_latin1, 'S');
3329     CASE_CHANGE_BODY_END  (~0, CALL_UPPER_CASE);
3330 }
3331
3332 /*
3333 =for apidoc to_utf8_title
3334
3335 Instead use L</toTITLE_utf8_safe>.
3336
3337 =cut */
3338
3339 /* Not currently externally documented, and subject to change:
3340  * <flags> is set iff the rules from the current underlying locale are to be
3341  *         used.  Since titlecase is not defined in POSIX, for other than a
3342  *         UTF-8 locale, uppercase is used instead for code points < 256.
3343  */
3344
3345 UV
3346 Perl__to_utf8_title_flags(pTHX_ const U8 *p,
3347                                 const U8 *e,
3348                                 U8* ustrp,
3349                                 STRLEN *lenp,
3350                                 bool flags,
3351                                 const char * const file,
3352                                 const int line)
3353 {
3354     UV result;
3355     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_TITLE,
3356                                                 cBOOL(flags), file, line);
3357
3358     PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS;
3359
3360     /* 2nd char of ucfirst(U+DF) is 's' */
3361     CASE_CHANGE_BODY_START(~0, toUPPER_LC, _to_upper_title_latin1, 's');
3362     CASE_CHANGE_BODY_END  (~0, CALL_TITLE_CASE);
3363 }
3364
3365 /*
3366 =for apidoc to_utf8_lower
3367
3368 Instead use L</toLOWER_utf8_safe>.
3369
3370 =cut */
3371
3372 /* Not currently externally documented, and subject to change:
3373  * <flags> is set iff iff the rules from the current underlying locale are to
3374  *         be used.
3375  */
3376
3377 UV
3378 Perl__to_utf8_lower_flags(pTHX_ const U8 *p,
3379                                 const U8 *e,
3380                                 U8* ustrp,
3381                                 STRLEN *lenp,
3382                                 bool flags,
3383                                 const char * const file,
3384                                 const int line)
3385 {
3386     UV result;
3387     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_LOWER,
3388                                                 cBOOL(flags), file, line);
3389
3390     PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS;
3391
3392     CASE_CHANGE_BODY_START(~0, toLOWER_LC, to_lower_latin1, 0 /* 0 is dummy */)
3393     CASE_CHANGE_BODY_END  (~0, CALL_LOWER_CASE)
3394 }
3395
3396 /*
3397 =for apidoc to_utf8_fold
3398
3399 Instead use L</toFOLD_utf8_safe>.
3400
3401 =cut */
3402
3403 /* Not currently externally documented, and subject to change,
3404  * in <flags>
3405  *      bit FOLD_FLAGS_LOCALE is set iff the rules from the current underlying
3406  *                            locale are to be used.
3407  *      bit FOLD_FLAGS_FULL   is set iff full case folds are to be used;
3408  *                            otherwise simple folds
3409  *      bit FOLD_FLAGS_NOMIX_ASCII is set iff folds of non-ASCII to ASCII are
3410  *                            prohibited
3411  */
3412
3413 UV
3414 Perl__to_utf8_fold_flags(pTHX_ const U8 *p,
3415                                const U8 *e,
3416                                U8* ustrp,
3417                                STRLEN *lenp,
3418                                U8 flags,
3419                                const char * const file,
3420                                const int line)
3421 {
3422     UV result;
3423     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_FOLD,
3424                                                 cBOOL(flags), file, line);
3425
3426     PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS;
3427
3428     /* These are mutually exclusive */
3429     assert (! ((flags & FOLD_FLAGS_LOCALE) && (flags & FOLD_FLAGS_NOMIX_ASCII)));
3430
3431     assert(p != ustrp); /* Otherwise overwrites */
3432
3433     CASE_CHANGE_BODY_START(FOLD_FLAGS_LOCALE, toFOLD_LC, _to_fold_latin1,
3434                  ((flags) & (FOLD_FLAGS_FULL | FOLD_FLAGS_NOMIX_ASCII)));
3435
3436         result = CALL_FOLD_CASE(result, p, ustrp, lenp, flags & FOLD_FLAGS_FULL);
3437
3438         if (flags & FOLD_FLAGS_LOCALE) {
3439
3440 #           define LONG_S_T      LATIN_SMALL_LIGATURE_LONG_S_T_UTF8
3441             const unsigned int long_s_t_len    = sizeof(LONG_S_T) - 1;
3442
3443 #         ifdef LATIN_CAPITAL_LETTER_SHARP_S_UTF8
3444 #           define CAP_SHARP_S   LATIN_CAPITAL_LETTER_SHARP_S_UTF8
3445
3446             const unsigned int cap_sharp_s_len = sizeof(CAP_SHARP_S) - 1;
3447
3448             /* Special case these two characters, as what normally gets
3449              * returned under locale doesn't work */
3450             if (UTF8SKIP(p) == cap_sharp_s_len
3451                 && memEQ((char *) p, CAP_SHARP_S, cap_sharp_s_len))
3452             {
3453                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3454                 Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3455                               "Can't do fc(\"\\x{1E9E}\") on non-UTF-8 locale; "
3456                               "resolved to \"\\x{17F}\\x{17F}\".");
3457                 goto return_long_s;
3458             }
3459             else
3460 #endif
3461                  if (UTF8SKIP(p) == long_s_t_len
3462                      && memEQ((char *) p, LONG_S_T, long_s_t_len))
3463             {
3464                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3465                 Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3466                               "Can't do fc(\"\\x{FB05}\") on non-UTF-8 locale; "
3467                               "resolved to \"\\x{FB06}\".");
3468                 goto return_ligature_st;
3469             }
3470
3471 #if    UNICODE_MAJOR_VERSION   == 3         \
3472     && UNICODE_DOT_VERSION     == 0         \
3473     && UNICODE_DOT_DOT_VERSION == 1
3474 #           define DOTTED_I   LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_UTF8
3475
3476             /* And special case this on this Unicode version only, for the same
3477              * reaons the other two are special cased.  They would cross the
3478              * 255/256 boundary which is forbidden under /l, and so the code
3479              * wouldn't catch that they are equivalent (which they are only in
3480              * this release) */
3481             else if (UTF8SKIP(p) == sizeof(DOTTED_I) - 1
3482                      && memEQ((char *) p, DOTTED_I, sizeof(DOTTED_I) - 1))
3483             {
3484                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3485                 Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3486                               "Can't do fc(\"\\x{0130}\") on non-UTF-8 locale; "
3487                               "resolved to \"\\x{0131}\".");
3488                 goto return_dotless_i;
3489             }
3490 #endif
3491
3492             return check_locale_boundary_crossing(p, result, ustrp, lenp);
3493         }
3494         else if (! (flags & FOLD_FLAGS_NOMIX_ASCII)) {
3495             return result;
3496         }
3497         else {
3498             /* This is called when changing the case of a UTF-8-encoded
3499              * character above the ASCII range, and the result should not
3500              * contain an ASCII character. */
3501
3502             UV original;    /* To store the first code point of <p> */
3503
3504             /* Look at every character in the result; if any cross the
3505             * boundary, the whole thing is disallowed */
3506             U8* s = ustrp;
3507             U8* e = ustrp + *lenp;
3508             while (s < e) {
3509                 if (isASCII(*s)) {
3510                     /* Crossed, have to return the original */
3511                     original = valid_utf8_to_uvchr(p, lenp);
3512
3513                     /* But in these instances, there is an alternative we can
3514                      * return that is valid */
3515                     if (original == LATIN_SMALL_LETTER_SHARP_S
3516 #ifdef LATIN_CAPITAL_LETTER_SHARP_S /* not defined in early Unicode releases */
3517                         || original == LATIN_CAPITAL_LETTER_SHARP_S
3518 #endif
3519                     ) {
3520                         goto return_long_s;
3521                     }
3522                     else if (original == LATIN_SMALL_LIGATURE_LONG_S_T) {
3523                         goto return_ligature_st;
3524                     }
3525 #if    UNICODE_MAJOR_VERSION   == 3         \
3526     && UNICODE_DOT_VERSION     == 0         \
3527     && UNICODE_DOT_DOT_VERSION == 1
3528
3529                     else if (original == LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE) {
3530                         goto return_dotless_i;
3531                     }
3532 #endif
3533                     Copy(p, ustrp, *lenp, char);
3534                     return original;
3535                 }
3536                 s += UTF8SKIP(s);
3537             }
3538
3539             /* Here, no characters crossed, result is ok as-is */
3540             return result;
3541         }
3542     }
3543
3544     /* Here, used locale rules.  Convert back to UTF-8 */
3545     if (UTF8_IS_INVARIANT(result)) {
3546         *ustrp = (U8) result;
3547         *lenp = 1;
3548     }
3549     else {
3550         *ustrp = UTF8_EIGHT_BIT_HI((U8) result);
3551         *(ustrp + 1) = UTF8_EIGHT_BIT_LO((U8) result);
3552         *lenp = 2;
3553     }
3554
3555     return result;
3556
3557   return_long_s:
3558     /* Certain folds to 'ss' are prohibited by the options, but they do allow
3559      * folds to a string of two of these characters.  By returning this
3560      * instead, then, e.g.,
3561      *      fc("\x{1E9E}") eq fc("\x{17F}\x{17F}")
3562      * works. */
3563
3564     *lenp = 2 * sizeof(LATIN_SMALL_LETTER_LONG_S_UTF8) - 2;
3565     Copy(LATIN_SMALL_LETTER_LONG_S_UTF8 LATIN_SMALL_LETTER_LONG_S_UTF8,
3566         ustrp, *lenp, U8);
3567     return LATIN_SMALL_LETTER_LONG_S;
3568
3569   return_ligature_st:
3570     /* Two folds to 'st' are prohibited by the options; instead we pick one and
3571      * have the other one fold to it */
3572
3573     *lenp = sizeof(LATIN_SMALL_LIGATURE_ST_UTF8) - 1;
3574     Copy(LATIN_SMALL_LIGATURE_ST_UTF8, ustrp, *lenp, U8);
3575     return LATIN_SMALL_LIGATURE_ST;
3576
3577 #if    UNICODE_MAJOR_VERSION   == 3         \
3578     && UNICODE_DOT_VERSION     == 0         \
3579     && UNICODE_DOT_DOT_VERSION == 1
3580
3581   return_dotless_i:
3582     *lenp = sizeof(LATIN_SMALL_LETTER_DOTLESS_I_UTF8) - 1;
3583     Copy(LATIN_SMALL_LETTER_DOTLESS_I_UTF8, ustrp, *lenp, U8);
3584     return LATIN_SMALL_LETTER_DOTLESS_I;
3585
3586 #endif
3587
3588 }
3589
3590 /* Note:
3591  * Returns a "swash" which is a hash described in utf8.c:Perl_swash_fetch().
3592  * C<pkg> is a pointer to a package name for SWASHNEW, should be "utf8".
3593  * For other parameters, see utf8::SWASHNEW in lib/utf8_heavy.pl.
3594  */
3595
3596 SV*
3597 Perl_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv,
3598                       I32 minbits, I32 none)
3599 {
3600     PERL_ARGS_ASSERT_SWASH_INIT;
3601
3602     /* Returns a copy of a swash initiated by the called function.  This is the
3603      * public interface, and returning a copy prevents others from doing
3604      * mischief on the original */
3605
3606     return newSVsv(_core_swash_init(pkg, name, listsv, minbits, none,
3607                                     NULL, NULL));
3608 }
3609
3610 SV*
3611 Perl__core_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv,
3612                             I32 minbits, I32 none, SV* invlist,
3613                             U8* const flags_p)
3614 {
3615
3616     /*NOTE NOTE NOTE - If you want to use "return" in this routine you MUST
3617      * use the following define */
3618
3619 #define CORE_SWASH_INIT_RETURN(x)   \
3620     PL_curpm= old_PL_curpm;         \
3621     return x
3622
3623     /* Initialize and return a swash, creating it if necessary.  It does this
3624      * by calling utf8_heavy.pl in the general case.  The returned value may be
3625      * the swash's inversion list instead if the input parameters allow it.
3626      * Which is returned should be immaterial to callers, as the only
3627      * operations permitted on a swash, swash_fetch(), _get_swash_invlist(),
3628      * and swash_to_invlist() handle both these transparently.
3629      *
3630      * This interface should only be used by functions that won't destroy or
3631      * adversely change the swash, as doing so affects all other uses of the
3632      * swash in the program; the general public should use 'Perl_swash_init'
3633      * instead.
3634      *
3635      * pkg  is the name of the package that <name> should be in.
3636      * name is the name of the swash to find.  Typically it is a Unicode
3637      *      property name, including user-defined ones
3638      * listsv is a string to initialize the swash with.  It must be of the form
3639      *      documented as the subroutine return value in
3640      *      L<perlunicode/User-Defined Character Properties>
3641      * minbits is the number of bits required to represent each data element.
3642      *      It is '1' for binary properties.
3643      * none I (khw) do not understand this one, but it is used only in tr///.
3644      * invlist is an inversion list to initialize the swash with (or NULL)
3645      * flags_p if non-NULL is the address of various input and output flag bits
3646      *      to the routine, as follows:  ('I' means is input to the routine;
3647      *      'O' means output from the routine.  Only flags marked O are
3648      *      meaningful on return.)
3649      *  _CORE_SWASH_INIT_USER_DEFINED_PROPERTY indicates if the swash
3650      *      came from a user-defined property.  (I O)
3651      *  _CORE_SWASH_INIT_RETURN_IF_UNDEF indicates that instead of croaking
3652      *      when the swash cannot be located, to simply return NULL. (I)
3653      *  _CORE_SWASH_INIT_ACCEPT_INVLIST indicates that the caller will accept a
3654      *      return of an inversion list instead of a swash hash if this routine
3655      *      thinks that would result in faster execution of swash_fetch() later
3656      *      on. (I)
3657      *
3658      * Thus there are three possible inputs to find the swash: <name>,
3659      * <listsv>, and <invlist>.  At least one must be specified.  The result
3660      * will be the union of the specified ones, although <listsv>'s various
3661      * actions can intersect, etc. what <name> gives.  To avoid going out to
3662      * disk at all, <invlist> should specify completely what the swash should
3663      * have, and <listsv> should be &PL_sv_undef and <name> should be "".
3664      *
3665      * <invlist> is only valid for binary properties */
3666
3667     PMOP *old_PL_curpm= PL_curpm; /* save away the old PL_curpm */
3668
3669     SV* retval = &PL_sv_undef;
3670     HV* swash_hv = NULL;
3671     const int invlist_swash_boundary =
3672         (flags_p && *flags_p & _CORE_SWASH_INIT_ACCEPT_INVLIST)
3673         ? 512    /* Based on some benchmarking, but not extensive, see commit
3674                     message */
3675         : -1;   /* Never return just an inversion list */
3676
3677     assert(listsv != &PL_sv_undef || strNE(name, "") || invlist);
3678     assert(! invlist || minbits == 1);
3679
3680     PL_curpm= NULL; /* reset PL_curpm so that we dont get confused between the
3681                        regex that triggered the swash init and the swash init
3682                        perl logic itself.  See perl #122747 */
3683
3684     /* If data was passed in to go out to utf8_heavy to find the swash of, do
3685      * so */
3686     if (listsv != &PL_sv_undef || strNE(name, "")) {
3687         dSP;
3688         const size_t pkg_len = strlen(pkg);
3689         const size_t name_len = strlen(name);
3690         HV * const stash = gv_stashpvn(pkg, pkg_len, 0);
3691         SV* errsv_save;
3692         GV *method;
3693
3694         PERL_ARGS_ASSERT__CORE_SWASH_INIT;
3695
3696         PUSHSTACKi(PERLSI_MAGIC);
3697         ENTER;
3698         SAVEHINTS();
3699         save_re_context();
3700         /* We might get here via a subroutine signature which uses a utf8
3701          * parameter name, at which point PL_subname will have been set
3702          * but not yet used. */
3703         save_item(PL_subname);
3704         if (PL_parser && PL_parser->error_count)
3705             SAVEI8(PL_parser->error_count), PL_parser->error_count = 0;
3706         method = gv_fetchmeth(stash, "SWASHNEW", 8, -1);
3707         if (!method) {  /* demand load UTF-8 */
3708             ENTER;
3709             if ((errsv_save = GvSV(PL_errgv))) SAVEFREESV(errsv_save);
3710             GvSV(PL_errgv) = NULL;
3711 #ifndef NO_TAINT_SUPPORT
3712             /* It is assumed that callers of this routine are not passing in
3713              * any user derived data.  */
3714             /* Need to do this after save_re_context() as it will set
3715              * PL_tainted to 1 while saving $1 etc (see the code after getrx:
3716              * in Perl_magic_get).  Even line to create errsv_save can turn on
3717              * PL_tainted.  */
3718             SAVEBOOL(TAINT_get);
3719             TAINT_NOT;
3720 #endif
3721             Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpvn(pkg,pkg_len),
3722                              NULL);
3723             {
3724                 /* Not ERRSV, as there is no need to vivify a scalar we are
3725                    about to discard. */
3726                 SV * const errsv = GvSV(PL_errgv);
3727                 if (!SvTRUE(errsv)) {
3728                     GvSV(PL_errgv) = SvREFCNT_inc_simple(errsv_save);
3729                     SvREFCNT_dec(errsv);
3730                 }
3731             }
3732             LEAVE;
3733         }
3734         SPAGAIN;
3735         PUSHMARK(SP);
3736         EXTEND(SP,5);
3737         mPUSHp(pkg, pkg_len);
3738         mPUSHp(name, name_len);
3739         PUSHs(listsv);
3740         mPUSHi(minbits);
3741         mPUSHi(none);
3742         PUTBACK;
3743         if ((errsv_save = GvSV(PL_errgv))) SAVEFREESV(errsv_save);
3744         GvSV(PL_errgv) = NULL;
3745         /* If we already have a pointer to the method, no need to use
3746          * call_method() to repeat the lookup.  */
3747         if (method
3748             ? call_sv(MUTABLE_SV(method), G_SCALAR)
3749             : call_sv(newSVpvs_flags("SWASHNEW", SVs_TEMP), G_SCALAR | G_METHOD))
3750         {
3751             retval = *PL_stack_sp--;
3752             SvREFCNT_inc(retval);
3753         }
3754         {
3755             /* Not ERRSV.  See above. */
3756             SV * const errsv = GvSV(PL_errgv);
3757             if (!SvTRUE(errsv)) {
3758                 GvSV(PL_errgv) = SvREFCNT_inc_simple(errsv_save);
3759                 SvREFCNT_dec(errsv);
3760             }
3761         }
3762         LEAVE;
3763         POPSTACK;
3764         if (IN_PERL_COMPILETIME) {
3765             CopHINTS_set(PL_curcop, PL_hints);
3766         }
3767         if (!SvROK(retval) || SvTYPE(SvRV(retval)) != SVt_PVHV) {
3768             if (SvPOK(retval)) {
3769
3770                 /* If caller wants to handle missing properties, let them */
3771                 if (flags_p && *flags_p & _CORE_SWASH_INIT_RETURN_IF_UNDEF) {
3772                     CORE_SWASH_INIT_RETURN(NULL);
3773                 }
3774                 Perl_croak(aTHX_
3775                            "Can't find Unicode property definition \"%" SVf "\"",
3776                            SVfARG(retval));
3777                 NOT_REACHED; /* NOTREACHED */
3778             }
3779         }
3780     } /* End of calling the module to find the swash */
3781
3782     /* If this operation fetched a swash, and we will need it later, get it */
3783     if (retval != &PL_sv_undef
3784         && (minbits == 1 || (flags_p
3785                             && ! (*flags_p
3786                                   & _CORE_SWASH_INIT_USER_DEFINED_PROPERTY))))
3787     {
3788         swash_hv = MUTABLE_HV(SvRV(retval));
3789
3790         /* If we don't already know that there is a user-defined component to
3791          * this swash, and the user has indicated they wish to know if there is
3792          * one (by passing <flags_p>), find out */
3793         if (flags_p && ! (*flags_p & _CORE_SWASH_INIT_USER_DEFINED_PROPERTY)) {
3794             SV** user_defined = hv_fetchs(swash_hv, "USER_DEFINED", FALSE);
3795             if (user_defined && SvUV(*user_defined)) {
3796                 *flags_p |= _CORE_SWASH_INIT_USER_DEFINED_PROPERTY;
3797             }
3798         }
3799     }
3800
3801     /* Make sure there is an inversion list for binary properties */
3802     if (minbits == 1) {
3803         SV** swash_invlistsvp = NULL;
3804         SV* swash_invlist = NULL;
3805         bool invlist_in_swash_is_valid = FALSE;
3806         bool swash_invlist_unclaimed = FALSE; /* whether swash_invlist has
3807                                             an unclaimed reference count */
3808
3809         /* If this operation fetched a swash, get its already existing
3810          * inversion list, or create one for it */
3811
3812         if (swash_hv) {
3813             swash_invlistsvp = hv_fetchs(swash_hv, "V", FALSE);
3814             if (swash_invlistsvp) {
3815                 swash_invlist = *swash_invlistsvp;
3816                 invlist_in_swash_is_valid = TRUE;
3817             }
3818             else {
3819                 swash_invlist = _swash_to_invlist(retval);
3820                 swash_invlist_unclaimed = TRUE;
3821             }
3822         }
3823
3824         /* If an inversion list was passed in, have to include it */
3825         if (invlist) {
3826
3827             /* Any fetched swash will by now have an inversion list in it;
3828              * otherwise <swash_invlist>  will be NULL, indicating that we
3829              * didn't fetch a swash */
3830             if (swash_invlist) {
3831
3832                 /* Add the passed-in inversion list, which invalidates the one
3833                  * already stored in the swash */
3834                 invlist_in_swash_is_valid = FALSE;
3835                 SvREADONLY_off(swash_invlist);  /* Turned on again below */
3836                 _invlist_union(invlist, swash_invlist, &swash_invlist);
3837             }
3838             else {
3839
3840                 /* Here, there is no swash already.  Set up a minimal one, if
3841                  * we are going to return a swash */
3842                 if ((int) _invlist_len(invlist) > invlist_swash_boundary) {
3843                     swash_hv = newHV();
3844                     retval = newRV_noinc(MUTABLE_SV(swash_hv));
3845                 }
3846                 swash_invlist = invlist;
3847             }
3848         }
3849
3850         /* Here, we have computed the union of all the passed-in data.  It may
3851          * be that there was an inversion list in the swash which didn't get
3852          * touched; otherwise save the computed one */
3853         if (! invlist_in_swash_is_valid
3854             && (int) _invlist_len(swash_invlist) > invlist_swash_boundary)
3855         {
3856             if (! hv_stores(MUTABLE_HV(SvRV(retval)), "V", swash_invlist))
3857             {
3858                 Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
3859             }
3860             /* We just stole a reference count. */
3861             if (swash_invlist_unclaimed) swash_invlist_unclaimed = FALSE;
3862             else SvREFCNT_inc_simple_void_NN(swash_invlist);
3863         }
3864
3865         /* The result is immutable.  Forbid attempts to change it. */
3866         SvREADONLY_on(swash_invlist);
3867
3868         /* Use the inversion list stand-alone if small enough */
3869         if ((int) _invlist_len(swash_invlist) <= invlist_swash_boundary) {
3870             SvREFCNT_dec(retval);
3871             if (!swash_invlist_unclaimed)
3872                 SvREFCNT_inc_simple_void_NN(swash_invlist);
3873             retval = newRV_noinc(swash_invlist);
3874         }
3875     }
3876
3877     CORE_SWASH_INIT_RETURN(retval);
3878 #undef CORE_SWASH_INIT_RETURN
3879 }
3880
3881
3882 /* This API is wrong for special case conversions since we may need to
3883  * return several Unicode characters for a single Unicode character
3884  * (see lib/unicore/SpecCase.txt) The SWASHGET in lib/utf8_heavy.pl is
3885  * the lower-level routine, and it is similarly broken for returning
3886  * multiple values.  --jhi
3887  * For those, you should use S__to_utf8_case() instead */
3888 /* Now SWASHGET is recasted into S_swatch_get in this file. */
3889
3890 /* Note:
3891  * Returns the value of property/mapping C<swash> for the first character
3892  * of the string C<ptr>. If C<do_utf8> is true, the string C<ptr> is
3893  * assumed to be in well-formed UTF-8. If C<do_utf8> is false, the string C<ptr>
3894  * is assumed to be in native 8-bit encoding. Caches the swatch in C<swash>.
3895  *
3896  * A "swash" is a hash which contains initially the keys/values set up by
3897  * SWASHNEW.  The purpose is to be able to completely represent a Unicode
3898  * property for all possible code points.  Things are stored in a compact form
3899  * (see utf8_heavy.pl) so that calculation is required to find the actual
3900  * property value for a given code point.  As code points are looked up, new
3901  * key/value pairs are added to the hash, so that the calculation doesn't have
3902  * to ever be re-done.  Further, each calculation is done, not just for the
3903  * desired one, but for a whole block of code points adjacent to that one.
3904  * For binary properties on ASCII machines, the block is usually for 64 code
3905  * points, starting with a code point evenly divisible by 64.  Thus if the
3906  * property value for code point 257 is requested, the code goes out and
3907  * calculates the property values for all 64 code points between 256 and 319,
3908  * and stores these as a single 64-bit long bit vector, called a "swatch",
3909  * under the key for code point 256.  The key is the UTF-8 encoding for code
3910  * point 256, minus the final byte.  Thus, if the length of the UTF-8 encoding
3911  * for a code point is 13 bytes, the key will be 12 bytes long.  If the value
3912  * for code point 258 is then requested, this code realizes that it would be
3913  * stored under the key for 256, and would find that value and extract the
3914  * relevant bit, offset from 256.
3915  *
3916  * Non-binary properties are stored in as many bits as necessary to represent
3917  * their values (32 currently, though the code is more general than that), not
3918  * as single bits, but the principle is the same: the value for each key is a
3919  * vector that encompasses the property values for all code points whose UTF-8
3920  * representations are represented by the key.  That is, for all code points
3921  * whose UTF-8 representations are length N bytes, and the key is the first N-1
3922  * bytes of that.
3923  */
3924 UV
3925 Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8)
3926 {
3927     HV *const hv = MUTABLE_HV(SvRV(swash));
3928     U32 klen;
3929     U32 off;
3930     STRLEN slen = 0;
3931     STRLEN needents;
3932     const U8 *tmps = NULL;
3933     SV *swatch;
3934     const U8 c = *ptr;
3935
3936     PERL_ARGS_ASSERT_SWASH_FETCH;
3937
3938     /* If it really isn't a hash, it isn't really swash; must be an inversion
3939      * list */
3940     if (SvTYPE(hv) != SVt_PVHV) {
3941         return _invlist_contains_cp((SV*)hv,
3942                                     (do_utf8)
3943                                      ? valid_utf8_to_uvchr(ptr, NULL)
3944                                      : c);
3945     }
3946
3947     /* We store the values in a "swatch" which is a vec() value in a swash
3948      * hash.  Code points 0-255 are a single vec() stored with key length
3949      * (klen) 0.  All other code points have a UTF-8 representation
3950      * 0xAA..0xYY,0xZZ.  A vec() is constructed containing all of them which
3951      * share 0xAA..0xYY, which is the key in the hash to that vec.  So the key
3952      * length for them is the length of the encoded char - 1.  ptr[klen] is the
3953      * final byte in the sequence representing the character */
3954     if (!do_utf8 || UTF8_IS_INVARIANT(c)) {
3955         klen = 0;
3956         needents = 256;
3957         off = c;
3958     }
3959     else if (UTF8_IS_DOWNGRADEABLE_START(c)) {
3960         klen = 0;
3961         needents = 256;
3962         off = EIGHT_BIT_UTF8_TO_NATIVE(c, *(ptr + 1));
3963     }
3964     else {
3965         klen = UTF8SKIP(ptr) - 1;
3966
3967         /* Each vec() stores 2**UTF_ACCUMULATION_SHIFT values.  The offset into
3968          * the vec is the final byte in the sequence.  (In EBCDIC this is
3969          * converted to I8 to get consecutive values.)  To help you visualize
3970          * all this:
3971          *                       Straight 1047   After final byte
3972          *             UTF-8      UTF-EBCDIC     I8 transform
3973          *  U+0400:  \xD0\x80    \xB8\x41\x41    \xB8\x41\xA0
3974          *  U+0401:  \xD0\x81    \xB8\x41\x42    \xB8\x41\xA1
3975          *    ...
3976          *  U+0409:  \xD0\x89    \xB8\x41\x4A    \xB8\x41\xA9
3977          *  U+040A:  \xD0\x8A    \xB8\x41\x51    \xB8\x41\xAA
3978          *    ...
3979          *  U+0412:  \xD0\x92    \xB8\x41\x59    \xB8\x41\xB2
3980          *  U+0413:  \xD0\x93    \xB8\x41\x62    \xB8\x41\xB3
3981          *    ...
3982          *  U+041B:  \xD0\x9B    \xB8\x41\x6A    \xB8\x41\xBB
3983          *  U+041C:  \xD0\x9C    \xB8\x41\x70    \xB8\x41\xBC
3984          *    ...
3985          *  U+041F:  \xD0\x9F    \xB8\x41\x73    \xB8\x41\xBF
3986          *  U+0420:  \xD0\xA0    \xB8\x42\x41    \xB8\x42\x41
3987          *
3988          * (There are no discontinuities in the elided (...) entries.)
3989          * The UTF-8 key for these 33 code points is '\xD0' (which also is the
3990          * key for the next 31, up through U+043F, whose UTF-8 final byte is
3991          * \xBF).  Thus in UTF-8, each key is for a vec() for 64 code points.
3992          * The final UTF-8 byte, which ranges between \x80 and \xBF, is an
3993          * index into the vec() swatch (after subtracting 0x80, which we
3994          * actually do with an '&').
3995          * In UTF-EBCDIC, each key is for a 32 code point vec().  The first 32
3996          * code points above have key '\xB8\x41'. The final UTF-EBCDIC byte has
3997          * dicontinuities which go away by transforming it into I8, and we
3998          * effectively subtract 0xA0 to get the index. */
3999         needents = (1 << UTF_ACCUMULATION_SHIFT);
4000         off      = NATIVE_UTF8_TO_I8(ptr[klen]) & UTF_CONTINUATION_MASK;
4001     }
4002
4003     /*
4004      * This single-entry cache saves about 1/3 of the UTF-8 overhead in test
4005      * suite.  (That is, only 7-8% overall over just a hash cache.  Still,
4006      * it's nothing to sniff at.)  Pity we usually come through at least
4007      * two function calls to get here...
4008      *
4009      * NB: this code assumes that swatches are never modified, once generated!
4010      */
4011
4012     if (hv   == PL_last_swash_hv &&
4013         klen == PL_last_swash_klen &&
4014         (!klen || memEQ((char *)ptr, (char *)PL_last_swash_key, klen)) )
4015     {
4016         tmps = PL_last_swash_tmps;
4017         slen = PL_last_swash_slen;
4018     }
4019     else {
4020         /* Try our second-level swatch cache, kept in a hash. */
4021         SV** svp = hv_fetch(hv, (const char*)ptr, klen, FALSE);
4022
4023         /* If not cached, generate it via swatch_get */
4024         if (!svp || !SvPOK(*svp)
4025                  || !(tmps = (const U8*)SvPV_const(*svp, slen)))
4026         {
4027             if (klen) {
4028                 const UV code_point = valid_utf8_to_uvchr(ptr, NULL);
4029                 swatch = swatch_get(swash,
4030                                     code_point & ~((UV)needents - 1),
4031                                     needents);
4032             }
4033             else {  /* For the first 256 code points, the swatch has a key of
4034                        length 0 */
4035                 swatch = swatch_get(swash, 0, needents);
4036             }
4037
4038             if (IN_PERL_COMPILETIME)
4039                 CopHINTS_set(PL_curcop, PL_hints);
4040
4041             svp = hv_store(hv, (const char *)ptr, klen, swatch, 0);
4042
4043             if (!svp || !(tmps = (U8*)SvPV(*svp, slen))
4044                      || (slen << 3) < needents)
4045                 Perl_croak(aTHX_ "panic: swash_fetch got improper swatch, "
4046                            "svp=%p, tmps=%p, slen=%" UVuf ", needents=%" UVuf,
4047                            svp, tmps, (UV)slen, (UV)needents);
4048         }
4049
4050         PL_last_swash_hv = hv;
4051         assert(klen <= sizeof(PL_last_swash_key));
4052         PL_last_swash_klen = (U8)klen;
4053         /* FIXME change interpvar.h?  */
4054         PL_last_swash_tmps = (U8 *) tmps;
4055         PL_last_swash_slen = slen;
4056         if (klen)
4057             Copy(ptr, PL_last_swash_key, klen, U8);
4058     }
4059
4060     switch ((int)((slen << 3) / needents)) {
4061     case 1:
4062         return ((UV) tmps[off >> 3] & (1 << (off & 7))) != 0;
4063     case 8:
4064         return ((UV) tmps[off]);
4065     case 16:
4066         off <<= 1;
4067         return
4068             ((UV) tmps[off    ] << 8) +
4069             ((UV) tmps[off + 1]);
4070     case 32:
4071         off <<= 2;
4072         return
4073             ((UV) tmps[off    ] << 24) +
4074             ((UV) tmps[off + 1] << 16) +
4075             ((UV) tmps[off + 2] <<  8) +
4076             ((UV) tmps[off + 3]);
4077     }
4078     Perl_croak(aTHX_ "panic: swash_fetch got swatch of unexpected bit width, "
4079                "slen=%" UVuf ", needents=%" UVuf, (UV)slen, (UV)needents);
4080     NORETURN_FUNCTION_END;
4081 }
4082
4083 /* Read a single line of the main body of the swash input text.  These are of
4084  * the form:
4085  * 0053 0056    0073
4086  * where each number is hex.  The first two numbers form the minimum and
4087  * maximum of a range, and the third is the value associated with the range.
4088  * Not all swashes should have a third number
4089  *
4090  * On input: l    points to the beginning of the line to be examined; it points
4091  *                to somewhere in the string of the whole input text, and is
4092  *                terminated by a \n or the null string terminator.
4093  *           lend   points to the null terminator of that string
4094  *           wants_value    is non-zero if the swash expects a third number
4095  *           typestr is the name of the swash's mapping, like 'ToLower'
4096  * On output: *min, *max, and *val are set to the values read from the line.
4097  *            returns a pointer just beyond the line examined.  If there was no
4098  *            valid min number on the line, returns lend+1
4099  */
4100
4101 STATIC U8*
4102 S_swash_scan_list_line(pTHX_ U8* l, U8* const lend, UV* min, UV* max, UV* val,
4103                              const bool wants_value, const U8* const typestr)
4104 {
4105     const int  typeto  = typestr[0] == 'T' && typestr[1] == 'o';
4106     STRLEN numlen;          /* Length of the number */
4107     I32 flags = PERL_SCAN_SILENT_ILLDIGIT
4108                 | PERL_SCAN_DISALLOW_PREFIX
4109                 | PERL_SCAN_SILENT_NON_PORTABLE;
4110
4111     /* nl points to the next \n in the scan */
4112     U8* const nl = (U8*)memchr(l, '\n', lend - l);
4113
4114     PERL_ARGS_ASSERT_SWASH_SCAN_LIST_LINE;
4115
4116     /* Get the first number on the line: the range minimum */
4117     numlen = lend - l;
4118     *min = grok_hex((char *)l, &numlen, &flags, NULL);
4119     *max = *min;    /* So can never return without setting max */
4120     if (numlen)     /* If found a hex number, position past it */
4121         l += numlen;
4122     else if (nl) {          /* Else, go handle next line, if any */
4123         return nl + 1;  /* 1 is length of "\n" */
4124     }
4125     else {              /* Else, no next line */
4126         return lend + 1;        /* to LIST's end at which \n is not found */
4127     }
4128
4129     /* The max range value follows, separated by a BLANK */
4130     if (isBLANK(*l)) {
4131         ++l;
4132         flags = PERL_SCAN_SILENT_ILLDIGIT
4133                 | PERL_SCAN_DISALLOW_PREFIX
4134                 | PERL_SCAN_SILENT_NON_PORTABLE;
4135         numlen = lend - l;
4136         *max = grok_hex((char *)l, &numlen, &flags, NULL);
4137         if (numlen)
4138             l += numlen;
4139         else    /* If no value here, it is a single element range */
4140             *max = *min;
4141
4142         /* Non-binary tables have a third entry: what the first element of the
4143          * range maps to.  The map for those currently read here is in hex */
4144         if (wants_value) {
4145             if (isBLANK(*l)) {
4146                 ++l;
4147                 flags = PERL_SCAN_SILENT_ILLDIGIT
4148                     | PERL_SCAN_DISALLOW_PREFIX
4149                     | PERL_SCAN_SILENT_NON_PORTABLE;
4150                 numlen = lend - l;
4151                 *val = grok_hex((char *)l, &numlen, &flags, NULL);
4152                 if (numlen)
4153                     l += numlen;
4154                 else
4155                     *val = 0;
4156             }
4157             else {
4158                 *val = 0;
4159                 if (typeto) {
4160                     /* diag_listed_as: To%s: illegal mapping '%s' */
4161                     Perl_croak(aTHX_ "%s: illegal mapping '%s'",
4162                                      typestr, l);
4163                 }
4164             }
4165         }
4166         else
4167             *val = 0; /* bits == 1, then any val should be ignored */
4168     }
4169     else { /* Nothing following range min, should be single element with no
4170               mapping expected */
4171         if (wants_value) {
4172             *val = 0;
4173             if (typeto) {
4174                 /* diag_listed_as: To%s: illegal mapping '%s' */
4175                 Perl_croak(aTHX_ "%s: illegal mapping '%s'", typestr, l);
4176             }
4177         }
4178         else
4179             *val = 0; /* bits == 1, then val should be ignored */
4180     }
4181
4182     /* Position to next line if any, or EOF */
4183     if (nl)
4184         l = nl + 1;
4185     else
4186         l = lend;
4187
4188     return l;
4189 }
4190
4191 /* Note:
4192  * Returns a swatch (a bit vector string) for a code point sequence
4193  * that starts from the value C<start> and comprises the number C<span>.
4194  * A C<swash> must be an object created by SWASHNEW (see lib/utf8_heavy.pl).
4195  * Should be used via swash_fetch, which will cache the swatch in C<swash>.
4196  */
4197 STATIC SV*
4198 S_swatch_get(pTHX_ SV* swash, UV start, UV span)
4199 {
4200     SV *swatch;
4201     U8 *l, *lend, *x, *xend, *s, *send;
4202     STRLEN lcur, xcur, scur;
4203     HV *const hv = MUTABLE_HV(SvRV(swash));
4204     SV** const invlistsvp = hv_fetchs(hv, "V", FALSE);
4205
4206     SV** listsvp = NULL; /* The string containing the main body of the table */
4207     SV** extssvp = NULL;
4208     SV** invert_it_svp = NULL;
4209     U8* typestr = NULL;
4210     STRLEN bits;
4211     STRLEN octets; /* if bits == 1, then octets == 0 */
4212     UV  none;
4213     UV  end = start + span;
4214
4215     if (invlistsvp == NULL) {
4216         SV** const bitssvp = hv_fetchs(hv, "BITS", FALSE);
4217         SV** const nonesvp = hv_fetchs(hv, "NONE", FALSE);
4218         SV** const typesvp = hv_fetchs(hv, "TYPE", FALSE);
4219         extssvp = hv_fetchs(hv, "EXTRAS", FALSE);
4220         listsvp = hv_fetchs(hv, "LIST", FALSE);
4221         invert_it_svp = hv_fetchs(hv, "INVERT_IT", FALSE);
4222
4223         bits  = SvUV(*bitssvp);
4224         none  = SvUV(*nonesvp);
4225         typestr = (U8*)SvPV_nolen(*typesvp);
4226     }
4227     else {
4228         bits = 1;
4229         none = 0;
4230     }
4231     octets = bits >> 3; /* if bits == 1, then octets == 0 */
4232
4233     PERL_ARGS_ASSERT_SWATCH_GET;
4234
4235     if (bits != 1 && bits != 8 && bits != 16 && bits != 32) {
4236         Perl_croak(aTHX_ "panic: swatch_get doesn't expect bits %" UVuf,
4237                                                  (UV)bits);
4238     }
4239
4240     /* If overflowed, use the max possible */
4241     if (end < start) {
4242         end = UV_MAX;
4243         span = end - start;
4244     }
4245
4246     /* create and initialize $swatch */
4247     scur   = octets ? (span * octets) : (span + 7) / 8;
4248     swatch = newSV(scur);
4249     SvPOK_on(swatch);
4250     s = (U8*)SvPVX(swatch);
4251     if (octets && none) {
4252         const U8* const e = s + scur;
4253         while (s < e) {
4254             if (bits == 8)
4255                 *s++ = (U8)(none & 0xff);
4256             else if (bits == 16) {
4257                 *s++ = (U8)((none >>  8) & 0xff);
4258                 *s++ = (U8)( none        & 0xff);
4259             }
4260             else if (bits == 32) {
4261                 *s++ = (U8)((none >> 24) & 0xff);
4262                 *s++ = (U8)((none >> 16) & 0xff);
4263                 *s++ = (U8)((none >>  8) & 0xff);
4264                 *s++ = (U8)( none        & 0xff);
4265             }
4266         }
4267         *s = '\0';
4268     }
4269     else {
4270         (void)memzero((U8*)s, scur + 1);
4271     }
4272     SvCUR_set(swatch, scur);
4273     s = (U8*)SvPVX(swatch);
4274
4275     if (invlistsvp) {   /* If has an inversion list set up use that */
4276         _invlist_populate_swatch(*invlistsvp, start, end, s);
4277         return swatch;
4278     }
4279
4280     /* read $swash->{LIST} */
4281     l = (U8*)SvPV(*listsvp, lcur);
4282     lend = l + lcur;
4283     while (l < lend) {
4284         UV min, max, val, upper;
4285         l = swash_scan_list_line(l, lend, &min, &max, &val,
4286                                                         cBOOL(octets), typestr);
4287         if (l > lend) {
4288             break;
4289         }
4290
4291         /* If looking for something beyond this range, go try the next one */
4292         if (max < start)
4293             continue;
4294
4295         /* <end> is generally 1 beyond where we want to set things, but at the
4296          * platform's infinity, where we can't go any higher, we want to
4297          * include the code point at <end> */
4298         upper = (max < end)
4299                 ? max
4300                 : (max != UV_MAX || end != UV_MAX)
4301                   ? end - 1
4302                   : end;
4303
4304         if (octets) {
4305             UV key;
4306             if (min < start) {
4307                 if (!none || val < none) {
4308                     val += start - min;
4309                 }
4310                 min = start;
4311             }
4312             for (key = min; key <= upper; key++) {
4313                 STRLEN offset;
4314                 /* offset must be non-negative (start <= min <= key < end) */
4315                 offset = octets * (key - start);
4316                 if (bits == 8)
4317                     s[offset] = (U8)(val & 0xff);
4318                 else if (bits == 16) {
4319                     s[offset    ] = (U8)((val >>  8) & 0xff);
4320                     s[offset + 1] = (U8)( val        & 0xff);
4321                 }
4322                 else if (bits == 32) {
4323                     s[offset    ] = (U8)((val >> 24) & 0xff);
4324                     s[offset + 1] = (U8)((val >> 16) & 0xff);
4325                     s[offset + 2] = (U8)((val >>  8) & 0xff);
4326                     s[offset + 3] = (U8)( val        & 0xff);
4327                 }
4328
4329                 if (!none || val < none)
4330                     ++val;
4331             }
4332         }
4333         else { /* bits == 1, then val should be ignored */
4334             UV key;
4335             if (min < start)
4336                 min = start;
4337
4338             for (key = min; key <= upper; key++) {
4339                 const STRLEN offset = (STRLEN)(key - start);
4340                 s[offset >> 3] |= 1 << (offset & 7);
4341             }
4342         }
4343     } /* while */
4344
4345     /* Invert if the data says it should be.  Assumes that bits == 1 */
4346     if (invert_it_svp && SvUV(*invert_it_svp)) {
4347
4348         /* Unicode properties should come with all bits above PERL_UNICODE_MAX
4349          * be 0, and their inversion should also be 0, as we don't succeed any
4350          * Unicode property matches for non-Unicode code points */
4351         if (start <= PERL_UNICODE_MAX) {
4352
4353             /* The code below assumes that we never cross the
4354              * Unicode/above-Unicode boundary in a range, as otherwise we would
4355              * have to figure out where to stop flipping the bits.  Since this
4356              * boundary is divisible by a large power of 2, and swatches comes
4357              * in small powers of 2, this should be a valid assumption */
4358             assert(start + span - 1 <= PERL_UNICODE_MAX);
4359
4360             send = s + scur;
4361             while (s < send) {
4362                 *s = ~(*s);
4363                 s++;
4364             }
4365         }
4366     }
4367
4368     /* read $swash->{EXTRAS}
4369      * This code also copied to swash_to_invlist() below */
4370     x = (U8*)SvPV(*extssvp, xcur);
4371     xend = x + xcur;
4372     while (x < xend) {
4373         STRLEN namelen;
4374         U8 *namestr;
4375         SV** othersvp;
4376         HV* otherhv;
4377         STRLEN otherbits;
4378         SV **otherbitssvp, *other;
4379         U8 *s, *o, *nl;
4380         STRLEN slen, olen;
4381
4382         const U8 opc = *x++;
4383         if (opc == '\n')
4384             continue;
4385
4386         nl = (U8*)memchr(x, '\n', xend - x);
4387
4388         if (opc != '-' && opc != '+' && opc != '!' && opc != '&') {
4389             if (nl) {
4390                 x = nl + 1; /* 1 is length of "\n" */
4391                 continue;
4392             }
4393             else {
4394                 x = xend; /* to EXTRAS' end at which \n is not found */
4395                 break;
4396             }
4397         }
4398
4399         namestr = x;
4400         if (nl) {
4401             namelen = nl - namestr;
4402             x = nl + 1;
4403         }
4404         else {
4405             namelen = xend - namestr;
4406             x = xend;
4407         }
4408
4409         othersvp = hv_fetch(hv, (char *)namestr, namelen, FALSE);
4410         otherhv = MUTABLE_HV(SvRV(*othersvp));
4411         otherbitssvp = hv_fetchs(otherhv, "BITS", FALSE);
4412         otherbits = (STRLEN)SvUV(*otherbitssvp);
4413         if (bits < otherbits)
4414             Perl_croak(aTHX_ "panic: swatch_get found swatch size mismatch, "
4415                        "bits=%" UVuf ", otherbits=%" UVuf, (UV)bits, (UV)otherbits);
4416
4417         /* The "other" swatch must be destroyed after. */
4418         other = swatch_get(*othersvp, start, span);
4419         o = (U8*)SvPV(other, olen);
4420
4421         if (!olen)
4422             Perl_croak(aTHX_ "panic: swatch_get got improper swatch");
4423
4424         s = (U8*)SvPV(swatch, slen);
4425         if (bits == 1 && otherbits == 1) {
4426             if (slen != olen)
4427                 Perl_croak(aTHX_ "panic: swatch_get found swatch length "
4428                            "mismatch, slen=%" UVuf ", olen=%" UVuf,
4429                            (UV)slen, (UV)olen);
4430
4431             switch (opc) {
4432             case '+':
4433                 while (slen--)
4434                     *s++ |= *o++;
4435                 break;
4436             case '!':
4437                 while (slen--)
4438                     *s++ |= ~*o++;
4439                 break;
4440             case '-':
4441                 while (slen--)
4442                     *s++ &= ~*o++;
4443                 break;
4444             case '&':
4445                 while (slen--)
4446                     *s++ &= *o++;
4447                 break;
4448             default:
4449                 break;
4450             }
4451         }
4452         else {
4453             STRLEN otheroctets = otherbits >> 3;
4454             STRLEN offset = 0;
4455             U8* const send = s + slen;
4456
4457             while (s < send) {
4458                 UV otherval = 0;
4459
4460                 if (otherbits == 1) {
4461                     otherval = (o[offset >> 3] >> (offset & 7)) & 1;
4462                     ++offset;
4463                 }
4464                 else {
4465                     STRLEN vlen = otheroctets;
4466                     otherval = *o++;
4467                     while (--vlen) {
4468                         otherval <<= 8;
4469                         otherval |= *o++;
4470                     }
4471                 }
4472
4473                 if (opc == '+' && otherval)
4474                     NOOP;   /* replace with otherval */
4475                 else if (opc == '!' && !otherval)
4476                     otherval = 1;
4477                 else if (opc == '-' && otherval)
4478                     otherval = 0;
4479                 else if (opc == '&' && !otherval)
4480                     otherval = 0;
4481                 else {
4482                     s += octets; /* no replacement */
4483                     continue;
4484                 }
4485
4486                 if (bits == 8)
4487                     *s++ = (U8)( otherval & 0xff);
4488                 else if (bits == 16) {
4489                     *s++ = (U8)((otherval >>  8) & 0xff);
4490                     *s++ = (U8)( otherval        & 0xff);
4491                 }
4492                 else if (bits == 32) {
4493                     *s++ = (U8)((otherval >> 24) & 0xff);
4494                     *s++ = (U8)((otherval >> 16) & 0xff);
4495                     *s++ = (U8)((otherval >>  8) & 0xff);
4496                     *s++ = (U8)( otherval        & 0xff);
4497                 }
4498             }
4499         }
4500         sv_free(other); /* through with it! */
4501     } /* while */
4502     return swatch;
4503 }
4504
4505 HV*
4506 Perl__swash_inversion_hash(pTHX_ SV* const swash)
4507 {
4508
4509    /* Subject to change or removal.  For use only in regcomp.c and regexec.c
4510     * Can't be used on a property that is subject to user override, as it
4511     * relies on the value of SPECIALS in the swash which would be set by
4512     * utf8_heavy.pl to the hash in the non-overriden file, and hence is not set
4513     * for overridden properties
4514     *
4515     * Returns a hash which is the inversion and closure of a swash mapping.
4516     * For example, consider the input lines:
4517     * 004B              006B
4518     * 004C              006C
4519     * 212A              006B
4520     *
4521     * The returned hash would have two keys, the UTF-8 for 006B and the UTF-8 for
4522     * 006C.  The value for each key is an array.  For 006C, the array would
4523     * have two elements, the UTF-8 for itself, and for 004C.  For 006B, there
4524     * would be three elements in its array, the UTF-8 for 006B, 004B and 212A.
4525     *
4526     * Note that there are no elements in the hash for 004B, 004C, 212A.  The
4527     * keys are only code points that are folded-to, so it isn't a full closure.
4528     *
4529     * Essentially, for any code point, it gives all the code points that map to
4530     * it, or the list of 'froms' for that point.
4531     *
4532     * Currently it ignores any additions or deletions from other swashes,
4533     * looking at just the main body of the swash, and if there are SPECIALS
4534     * in the swash, at that hash
4535     *
4536     * The specials hash can be extra code points, and most likely consists of
4537     * maps from single code points to multiple ones (each expressed as a string
4538     * of UTF-8 characters).   This function currently returns only 1-1 mappings.
4539     * However consider this possible input in the specials hash:
4540     * "\xEF\xAC\x85" => "\x{0073}\x{0074}",         # U+FB05 => 0073 0074
4541     * "\xEF\xAC\x86" => "\x{0073}\x{0074}",         # U+FB06 => 0073 0074
4542     *
4543     * Both FB05 and FB06 map to the same multi-char sequence, which we don't
4544     * currently handle.  But it also means that FB05 and FB06 are equivalent in
4545     * a 1-1 mapping which we should handle, and this relationship may not be in
4546     * the main table.  Therefore this function examines all the multi-char
4547     * sequences and adds the 1-1 mappings that come out of that.
4548     *
4549     * XXX This function was originally intended to be multipurpose, but its
4550     * only use is quite likely to remain for constructing the inversion of
4551     * the CaseFolding (//i) property.  If it were more general purpose for
4552     * regex patterns, it would have to do the FB05/FB06 game for simple folds,
4553     * because certain folds are prohibited under /iaa and /il.  As an example,
4554     * in Unicode 3.0.1 both U+0130 and U+0131 fold to 'i', and hence are both
4555     * equivalent under /i.  But under /iaa and /il, the folds to 'i' are
4556     * prohibited, so we would not figure out that they fold to each other.
4557     * Code could be written to automatically figure this out, similar to the
4558     * code that does this for multi-character folds, but this is the only case
4559     * where something like this is ever likely to happen, as all the single
4560     * char folds to the 0-255 range are now quite settled.  Instead there is a
4561     * little special code that is compiled only for this Unicode version.  This
4562     * is smaller and didn't require much coding time to do.  But this makes
4563     * this routine strongly tied to being used just for CaseFolding.  If ever
4564     * it should be generalized, this would have to be fixed */
4565
4566     U8 *l, *lend;
4567     STRLEN lcur;
4568     HV *const hv = MUTABLE_HV(SvRV(swash));
4569
4570     /* The string containing the main body of the table.  This will have its
4571      * assertion fail if the swash has been converted to its inversion list */
4572     SV** const listsvp = hv_fetchs(hv, "LIST", FALSE);
4573
4574     SV** const typesvp = hv_fetchs(hv, "TYPE", FALSE);
4575     SV** const bitssvp = hv_fetchs(hv, "BITS", FALSE);
4576     SV** const nonesvp = hv_fetchs(hv, "NONE", FALSE);
4577     /*SV** const extssvp = hv_fetchs(hv, "EXTRAS", FALSE);*/
4578     const U8* const typestr = (U8*)SvPV_nolen(*typesvp);
4579     const STRLEN bits  = SvUV(*bitssvp);
4580     const STRLEN octets = bits >> 3; /* if bits == 1, then octets == 0 */
4581     const UV     none  = SvUV(*nonesvp);
4582     SV **specials_p = hv_fetchs(hv, "SPECIALS", 0);
4583
4584     HV* ret = newHV();
4585
4586     PERL_ARGS_ASSERT__SWASH_INVERSION_HASH;
4587
4588     /* Must have at least 8 bits to get the mappings */
4589     if (bits != 8 && bits != 16 && bits != 32) {
4590         Perl_croak(aTHX_ "panic: swash_inversion_hash doesn't expect bits %"
4591                          UVuf, (UV)bits);
4592     }
4593
4594     if (specials_p) { /* It might be "special" (sometimes, but not always, a
4595                         mapping to more than one character */
4596
4597         /* Construct an inverse mapping hash for the specials */
4598         HV * const specials_hv = MUTABLE_HV(SvRV(*specials_p));
4599         HV * specials_inverse = newHV();
4600         char *char_from; /* the lhs of the map */
4601         I32 from_len;   /* its byte length */
4602         char *char_to;  /* the rhs of the map */
4603         I32 to_len;     /* its byte length */
4604         SV *sv_to;      /* and in a sv */
4605         AV* from_list;  /* list of things that map to each 'to' */
4606
4607         hv_iterinit(specials_hv);
4608
4609         /* The keys are the characters (in UTF-8) that map to the corresponding
4610          * UTF-8 string value.  Iterate through the list creating the inverse
4611          * list. */
4612         while ((sv_to = hv_iternextsv(specials_hv, &char_from, &from_len))) {
4613             SV** listp;
4614             if (! SvPOK(sv_to)) {
4615                 Perl_croak(aTHX_ "panic: value returned from hv_iternextsv() "
4616                            "unexpectedly is not a string, flags=%lu",
4617                            (unsigned long)SvFLAGS(sv_to));
4618             }
4619             /*DEBUG_U(PerlIO_printf(Perl_debug_log, "Found mapping from %" UVXf ", First char of to is %" UVXf "\n", valid_utf8_to_uvchr((U8*) char_from, 0), valid_utf8_to_uvchr((U8*) SvPVX(sv_to), 0)));*/
4620
4621             /* Each key in the inverse list is a mapped-to value, and the key's
4622              * hash value is a list of the strings (each in UTF-8) that map to
4623              * it.  Those strings are all one character long */
4624             if ((listp = hv_fetch(specials_inverse,
4625                                     SvPVX(sv_to),
4626                                     SvCUR(sv_to), 0)))
4627             {
4628                 from_list = (AV*) *listp;
4629             }
4630             else { /* No entry yet for it: create one */
4631                 from_list = newAV();
4632                 if (! hv_store(specials_inverse,
4633                                 SvPVX(sv_to),
4634                                 SvCUR(sv_to),
4635                                 (SV*) from_list, 0))
4636                 {
4637                     Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
4638                 }
4639             }
4640
4641             /* Here have the list associated with this 'to' (perhaps newly
4642              * created and empty).  Just add to it.  Note that we ASSUME that
4643              * the input is guaranteed to not have duplications, so we don't
4644              * check for that.  Duplications just slow down execution time. */
4645             av_push(from_list, newSVpvn_utf8(char_from, from_len, TRUE));
4646         }
4647
4648         /* Here, 'specials_inverse' contains the inverse mapping.  Go through
4649          * it looking for cases like the FB05/FB06 examples above.  There would
4650          * be an entry in the hash like
4651         *       'st' => [ FB05, FB06 ]
4652         * In this example we will create two lists that get stored in the
4653         * returned hash, 'ret':
4654         *       FB05 => [ FB05, FB06 ]
4655         *       FB06 => [ FB05, FB06 ]
4656         *
4657         * Note that there is nothing to do if the array only has one element.
4658         * (In the normal 1-1 case handled below, we don't have to worry about
4659         * two lists, as everything gets tied to the single list that is
4660         * generated for the single character 'to'.  But here, we are omitting
4661         * that list, ('st' in the example), so must have multiple lists.) */
4662         while ((from_list = (AV *) hv_iternextsv(specials_inverse,
4663                                                  &char_to, &to_len)))
4664         {
4665             if (av_tindex_skip_len_mg(from_list) > 0) {
4666                 SSize_t i;
4667
4668                 /* We iterate over all combinations of i,j to place each code
4669                  * point on each list */
4670                 for (i = 0; i <= av_tindex_skip_len_mg(from_list); i++) {
4671                     SSize_t j;
4672                     AV* i_list = newAV();
4673                     SV** entryp = av_fetch(from_list, i, FALSE);
4674                     if (entryp == NULL) {
4675                         Perl_croak(aTHX_ "panic: av_fetch() unexpectedly"
4676                                          " failed");
4677                     }
4678                     if (hv_fetch(ret, SvPVX(*entryp), SvCUR(*entryp), FALSE)) {
4679                         Perl_croak(aTHX_ "panic: unexpected entry for %s",
4680                                                                 SvPVX(*entryp));
4681                     }
4682                     if (! hv_store(ret, SvPVX(*entryp), SvCUR(*entryp),
4683                                    (SV*) i_list, FALSE))
4684                     {
4685                         Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
4686                     }
4687
4688                     /* For DEBUG_U: UV u = valid_utf8_to_uvchr((U8*) SvPVX(*entryp), 0);*/
4689                     for (j = 0; j <= av_tindex_skip_len_mg(from_list); j++) {
4690                         entryp = av_fetch(from_list, j, FALSE);
4691                         if (entryp == NULL) {
4692                             Perl_croak(aTHX_ "panic: av_fetch() unexpectedly failed");
4693                         }
4694
4695                         /* When i==j this adds itself to the list */
4696                         av_push(i_list, newSVuv(utf8_to_uvchr_buf(
4697                                         (U8*) SvPVX(*entryp),
4698                                         (U8*) SvPVX(*entryp) + SvCUR(*entryp),
4699                                         0)));
4700                         /*DEBUG_U(PerlIO_printf(Perl_debug_log, "%s: %d: Adding %" UVXf " to list for %" UVXf "\n", __FILE__, __LINE__, valid_utf8_to_uvchr((U8*) SvPVX(*entryp), 0), u));*/
4701                     }
4702                 }
4703             }
4704         }
4705         SvREFCNT_dec(specials_inverse); /* done with it */
4706     } /* End of specials */
4707
4708     /* read $swash->{LIST} */
4709
4710 #if    UNICODE_MAJOR_VERSION   == 3         \
4711     && UNICODE_DOT_VERSION     == 0         \
4712     && UNICODE_DOT_DOT_VERSION == 1
4713
4714     /* For this version only U+130 and U+131 are equivalent under qr//i.  Add a
4715      * rule so that things work under /iaa and /il */
4716
4717     SV * mod_listsv = sv_mortalcopy(*listsvp);
4718     sv_catpv(mod_listsv, "130\t130\t131\n");
4719     l = (U8*)SvPV(mod_listsv, lcur);
4720
4721 #else
4722
4723     l = (U8*)SvPV(*listsvp, lcur);
4724
4725 #endif
4726
4727     lend = l + lcur;
4728
4729     /* Go through each input line */
4730     while (l < lend) {
4731         UV min, max, val;
4732         UV inverse;
4733         l = swash_scan_list_line(l, lend, &min, &max, &val,
4734                                                      cBOOL(octets), typestr);
4735         if (l > lend) {
4736             break;
4737         }
4738
4739         /* Each element in the range is to be inverted */
4740         for (inverse = min; inverse <= max; inverse++) {
4741             AV* list;
4742             SV** listp;
4743             IV i;
4744             bool found_key = FALSE;
4745             bool found_inverse = FALSE;
4746
4747             /* The key is the inverse mapping */
4748             char key[UTF8_MAXBYTES+1];
4749             char* key_end = (char *) uvchr_to_utf8((U8*) key, val);
4750             STRLEN key_len = key_end - key;
4751
4752             /* Get the list for the map */
4753             if ((listp = hv_fetch(ret, key, key_len, FALSE))) {
4754                 list = (AV*) *listp;
4755             }
4756             else { /* No entry yet for it: create one */
4757                 list = newAV();
4758                 if (! hv_store(ret, key, key_len, (SV*) list, FALSE)) {
4759                     Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
4760                 }
4761             }
4762
4763             /* Look through list to see if this inverse mapping already is
4764              * listed, or if there is a mapping to itself already */
4765             for (i = 0; i <= av_tindex_skip_len_mg(list); i++) {
4766                 SV** entryp = av_fetch(list, i, FALSE);
4767                 SV* entry;
4768                 UV uv;
4769                 if (entryp == NULL) {
4770                     Perl_croak(aTHX_ "panic: av_fetch() unexpectedly failed");
4771                 }
4772                 entry = *entryp;
4773                 uv = SvUV(entry);
4774                 /*DEBUG_U(PerlIO_printf(Perl_debug_log, "list for %" UVXf " contains %" UVXf "\n", val, uv));*/
4775                 if (uv == val) {
4776                     found_key = TRUE;
4777                 }
4778                 if (uv == inverse) {
4779                     found_inverse = TRUE;
4780                 }
4781
4782                 /* No need to continue searching if found everything we are
4783                  * looking for */
4784                 if (found_key && found_inverse) {
4785                     break;
4786                 }
4787             }
4788
4789             /* Make sure there is a mapping to itself on the list */
4790             if (! found_key) {
4791                 av_push(list, newSVuv(val));
4792                 /*DEBUG_U(PerlIO_printf(Perl_debug_log, "%s: %d: Adding %" UVXf " to list for %" UVXf "\n", __FILE__, __LINE__, val, val));*/
4793             }
4794
4795
4796             /* Simply add the value to the list */
4797             if (! found_inverse) {
4798                 av_push(list, newSVuv(inverse));
4799                 /*DEBUG_U(PerlIO_printf(Perl_debug_log, "%s: %d: Adding %" UVXf " to list for %" UVXf "\n", __FILE__, __LINE__, inverse, val));*/
4800             }
4801
4802             /* swatch_get() increments the value of val for each element in the
4803              * range.  That makes more compact tables possible.  You can
4804              * express the capitalization, for example, of all consecutive
4805              * letters with a single line: 0061\t007A\t0041 This maps 0061 to
4806              * 0041, 0062 to 0042, etc.  I (khw) have never understood 'none',
4807              * and it's not documented; it appears to be used only in
4808              * implementing tr//; I copied the semantics from swatch_get(), just
4809              * in case */
4810             if (!none || val < none) {
4811                 ++val;
4812             }
4813         }
4814     }
4815
4816     return ret;
4817 }
4818
4819 SV*
4820 Perl__swash_to_invlist(pTHX_ SV* const swash)
4821 {
4822
4823    /* Subject to change or removal.  For use only in one place in regcomp.c.
4824     * Ownership is given to one reference count in the returned SV* */
4825
4826     U8 *l, *lend;
4827     char *loc;
4828     STRLEN lcur;
4829     HV *const hv = MUTABLE_HV(SvRV(swash));
4830     UV elements = 0;    /* Number of elements in the inversion list */
4831     U8 empty[] = "";
4832     SV** listsvp;
4833     SV** typesvp;
4834     SV** bitssvp;
4835     SV** extssvp;
4836     SV** invert_it_svp;
4837
4838     U8* typestr;
4839     STRLEN bits;
4840     STRLEN octets; /* if bits == 1, then octets == 0 */
4841     U8 *x, *xend;
4842     STRLEN xcur;
4843
4844     SV* invlist;
4845
4846     PERL_ARGS_ASSERT__SWASH_TO_INVLIST;
4847
4848     /* If not a hash, it must be the swash's inversion list instead */
4849     if (SvTYPE(hv) != SVt_PVHV) {
4850         return SvREFCNT_inc_simple_NN((SV*) hv);
4851     }
4852
4853     /* The string containing the main body of the table */
4854     listsvp = hv_fetchs(hv, "LIST", FALSE);
4855     typesvp = hv_fetchs(hv, "TYPE", FALSE);
4856     bitssvp = hv_fetchs(hv, "BITS", FALSE);
4857     extssvp = hv_fetchs(hv, "EXTRAS", FALSE);
4858     invert_it_svp = hv_fetchs(hv, "INVERT_IT", FALSE);
4859
4860     typestr = (U8*)SvPV_nolen(*typesvp);
4861     bits  = SvUV(*bitssvp);
4862     octets = bits >> 3; /* if bits == 1, then octets == 0 */
4863
4864     /* read $swash->{LIST} */
4865     if (SvPOK(*listsvp)) {
4866         l = (U8*)SvPV(*listsvp, lcur);
4867     }
4868     else {
4869         /* LIST legitimately doesn't contain a string during compilation phases
4870          * of Perl itself, before the Unicode tables are generated.  In this
4871          * case, just fake things up by creating an empty list */
4872         l = empty;
4873         lcur = 0;
4874     }
4875     loc = (char *) l;
4876     lend = l + lcur;
4877
4878     if (*l == 'V') {    /*  Inversion list format */
4879         const char *after_atou = (char *) lend;
4880         UV element0;
4881         UV* other_elements_ptr;
4882
4883         /* The first number is a count of the rest */
4884         l++;
4885         if (!grok_atoUV((const char *)l, &elements, &after_atou)) {
4886             Perl_croak(aTHX_ "panic: Expecting a valid count of elements"
4887                              " at start of inversion list");
4888         }
4889         if (elements == 0) {
4890             invlist = _new_invlist(0);
4891         }
4892         else {
4893             l = (U8 *) after_atou;
4894
4895             /* Get the 0th element, which is needed to setup the inversion list
4896              * */
4897             while (isSPACE(*l)) l++;
4898             if (!grok_atoUV((const char *)l, &element0, &after_atou)) {
4899                 Perl_croak(aTHX_ "panic: Expecting a valid 0th element for"
4900                                  " inversion list");
4901             }
4902             l = (U8 *) after_atou;
4903             invlist = _setup_canned_invlist(elements, element0,
4904                                             &other_elements_ptr);
4905             elements--;
4906
4907             /* Then just populate the rest of the input */
4908             while (elements-- > 0) {
4909                 if (l > lend) {
4910                     Perl_croak(aTHX_ "panic: Expecting %" UVuf " more"
4911                                      " elements than available", elements);
4912                 }
4913                 while (isSPACE(*l)) l++;
4914                 if (!grok_atoUV((const char *)l, other_elements_ptr++,
4915                                  &after_atou))
4916                 {
4917                     Perl_croak(aTHX_ "panic: Expecting a valid element"
4918                                      " in inversion list");
4919                 }
4920                 l = (U8 *) after_atou;
4921             }
4922         }
4923     }
4924     else {
4925
4926         /* Scan the input to count the number of lines to preallocate array
4927          * size based on worst possible case, which is each line in the input
4928          * creates 2 elements in the inversion list: 1) the beginning of a
4929          * range in the list; 2) the beginning of a range not in the list.  */
4930         while ((loc = (strchr(loc, '\n'))) != NULL) {
4931             elements += 2;
4932             loc++;
4933         }
4934
4935         /* If the ending is somehow corrupt and isn't a new line, add another
4936          * element for the final range that isn't in the inversion list */
4937         if (! (*lend == '\n'
4938             || (*lend == '\0' && (lcur == 0 || *(lend - 1) == '\n'))))
4939         {
4940             elements++;
4941         }
4942
4943         invlist = _new_invlist(elements);
4944
4945         /* Now go through the input again, adding each range to the list */
4946         while (l < lend) {
4947             UV start, end;
4948             UV val;             /* Not used by this function */
4949
4950             l = swash_scan_list_line(l, lend, &start, &end, &val,
4951                                                         cBOOL(octets), typestr);
4952
4953             if (l > lend) {
4954                 break;
4955             }
4956
4957             invlist = _add_range_to_invlist(invlist, start, end);
4958         }
4959     }
4960
4961     /* Invert if the data says it should be */
4962     if (invert_it_svp && SvUV(*invert_it_svp)) {
4963         _invlist_invert(invlist);
4964     }
4965
4966     /* This code is copied from swatch_get()
4967      * read $swash->{EXTRAS} */
4968     x = (U8*)SvPV(*extssvp, xcur);
4969     xend = x + xcur;
4970     while (x < xend) {
4971         STRLEN namelen;
4972         U8 *namestr;
4973         SV** othersvp;
4974         HV* otherhv;
4975         STRLEN otherbits;
4976         SV **otherbitssvp, *other;
4977         U8 *nl;
4978
4979         const U8 opc = *x++;
4980         if (opc == '\n')
4981             continue;
4982
4983         nl = (U8*)memchr(x, '\n', xend - x);
4984
4985         if (opc != '-' && opc != '+' && opc != '!' && opc != '&') {
4986             if (nl) {
4987                 x = nl + 1; /* 1 is length of "\n" */
4988                 continue;
4989             }
4990             else {
4991                 x = xend; /* to EXTRAS' end at which \n is not found */
4992                 break;
4993             }
4994         }
4995
4996         namestr = x;
4997         if (nl) {
4998             namelen = nl - namestr;
4999             x = nl + 1;
5000         }
5001         else {
5002             namelen = xend - namestr;
5003             x = xend;
5004         }
5005
5006         othersvp = hv_fetch(hv, (char *)namestr, namelen, FALSE);
5007         otherhv = MUTABLE_HV(SvRV(*othersvp));
5008         otherbitssvp = hv_fetchs(otherhv, "BITS", FALSE);
5009         otherbits = (STRLEN)SvUV(*otherbitssvp);
5010
5011         if (bits != otherbits || bits != 1) {
5012             Perl_croak(aTHX_ "panic: _swash_to_invlist only operates on boolean "
5013                        "properties, bits=%" UVuf ", otherbits=%" UVuf,
5014                        (UV)bits, (UV)otherbits);
5015         }
5016
5017         /* The "other" swatch must be destroyed after. */
5018         other = _swash_to_invlist((SV *)*othersvp);
5019
5020         /* End of code copied from swatch_get() */
5021         switch (opc) {
5022         case '+':
5023             _invlist_union(invlist, other, &invlist);
5024             break;
5025         case '!':
5026             _invlist_union_maybe_complement_2nd(invlist, other, TRUE, &invlist);
5027             break;
5028         case '-':
5029             _invlist_subtract(invlist, other, &invlist);
5030             break;
5031         case '&':
5032             _invlist_intersection(invlist, other, &invlist);
5033             break;
5034         default:
5035             break;
5036         }
5037         sv_free(other); /* through with it! */
5038     }
5039
5040     SvREADONLY_on(invlist);
5041     return invlist;
5042 }
5043
5044 SV*
5045 Perl__get_swash_invlist(pTHX_ SV* const swash)
5046 {
5047     SV** ptr;
5048
5049     PERL_ARGS_ASSERT__GET_SWASH_INVLIST;
5050
5051     if (! SvROK(swash)) {
5052         return NULL;
5053     }
5054
5055     /* If it really isn't a hash, it isn't really swash; must be an inversion
5056      * list */
5057     if (SvTYPE(SvRV(swash)) != SVt_PVHV) {
5058         return SvRV(swash);
5059     }
5060
5061     ptr = hv_fetchs(MUTABLE_HV(SvRV(swash)), "V", FALSE);
5062     if (! ptr) {
5063         return NULL;
5064     }
5065
5066     return *ptr;
5067 }
5068
5069 bool
5070 Perl_check_utf8_print(pTHX_ const U8* s, const STRLEN len)
5071 {
5072     /* May change: warns if surrogates, non-character code points, or
5073      * non-Unicode code points are in 's' which has length 'len' bytes.
5074      * Returns TRUE if none found; FALSE otherwise.  The only other validity
5075      * check is to make sure that this won't exceed the string's length.
5076      *
5077      * Code points above the platform's C<IV_MAX> will raise a deprecation
5078      * warning, unless those are turned off.  */
5079
5080     const U8* const e = s + len;
5081     bool ok = TRUE;
5082
5083     PERL_ARGS_ASSERT_CHECK_UTF8_PRINT;
5084
5085     while (s < e) {
5086         if (UTF8SKIP(s) > len) {
5087             Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
5088                            "%s in %s", unees, PL_op ? OP_DESC(PL_op) : "print");
5089             return FALSE;
5090         }
5091         if (UNLIKELY(isUTF8_POSSIBLY_PROBLEMATIC(*s))) {
5092             if (UNLIKELY(UTF8_IS_SUPER(s, e))) {
5093                 if (   ckWARN_d(WARN_NON_UNICODE)
5094                     || (   ckWARN_d(WARN_DEPRECATED)
5095 #ifndef UV_IS_QUAD
5096                         && UNLIKELY(is_utf8_cp_above_31_bits(s, e))
5097 #else   /* Below is 64-bit words */
5098                         /* 2**63 and up meet these conditions provided we have
5099                          * a 64-bit word. */
5100 #   ifdef EBCDIC
5101                         && *s == 0xFE
5102                         && NATIVE_UTF8_TO_I8(s[1]) >= 0xA8
5103 #   else
5104                         && *s == 0xFF
5105                            /* s[1] being above 0x80 overflows */
5106                         && s[2] >= 0x88
5107 #   endif
5108 #endif
5109                 )) {
5110                     /* A side effect of this function will be to warn */
5111                     (void) utf8n_to_uvchr(s, e - s, NULL, UTF8_WARN_SUPER);
5112                     ok = FALSE;
5113                 }
5114             }
5115             else if (UNLIKELY(UTF8_IS_SURROGATE(s, e))) {
5116                 if (ckWARN_d(WARN_SURROGATE)) {
5117                     /* This has a different warning than the one the called
5118                      * function would output, so can't just call it, unlike we
5119                      * do for the non-chars and above-unicodes */
5120                     UV uv = utf8_to_uvchr_buf(s, e, NULL);
5121                     Perl_warner(aTHX_ packWARN(WARN_SURROGATE),
5122                         "Unicode surrogate U+%04" UVXf " is illegal in UTF-8",
5123                                              uv);
5124                     ok = FALSE;
5125                 }
5126             }
5127             else if (   UNLIKELY(UTF8_IS_NONCHAR(s, e))
5128                      && (ckWARN_d(WARN_NONCHAR)))
5129             {
5130                 /* A side effect of this function will be to warn */
5131                 (void) utf8n_to_uvchr(s, e - s, NULL, UTF8_WARN_NONCHAR);
5132                 ok = FALSE;
5133             }
5134         }
5135         s += UTF8SKIP(s);
5136     }
5137
5138     return ok;
5139 }
5140
5141 /*
5142 =for apidoc pv_uni_display
5143
5144 Build to the scalar C<dsv> a displayable version of the string C<spv>,
5145 length C<len>, the displayable version being at most C<pvlim> bytes long
5146 (if longer, the rest is truncated and C<"..."> will be appended).
5147
5148 The C<flags> argument can have C<UNI_DISPLAY_ISPRINT> set to display
5149 C<isPRINT()>able characters as themselves, C<UNI_DISPLAY_BACKSLASH>
5150 to display the C<\\[nrfta\\]> as the backslashed versions (like C<"\n">)
5151 (C<UNI_DISPLAY_BACKSLASH> is preferred over C<UNI_DISPLAY_ISPRINT> for C<"\\">).
5152 C<UNI_DISPLAY_QQ> (and its alias C<UNI_DISPLAY_REGEX>) have both
5153 C<UNI_DISPLAY_BACKSLASH> and C<UNI_DISPLAY_ISPRINT> turned on.
5154
5155 The pointer to the PV of the C<dsv> is returned.
5156
5157 See also L</sv_uni_display>.
5158
5159 =cut */
5160 char *
5161 Perl_pv_uni_display(pTHX_ SV *dsv, const U8 *spv, STRLEN len, STRLEN pvlim,
5162                           UV flags)
5163 {
5164     int truncated = 0;
5165     const char *s, *e;
5166
5167     PERL_ARGS_ASSERT_PV_UNI_DISPLAY;
5168
5169     SvPVCLEAR(dsv);
5170     SvUTF8_off(dsv);
5171     for (s = (const char *)spv, e = s + len; s < e; s += UTF8SKIP(s)) {
5172          UV u;
5173           /* This serves double duty as a flag and a character to print after
5174              a \ when flags & UNI_DISPLAY_BACKSLASH is true.
5175           */
5176          char ok = 0;
5177
5178          if (pvlim && SvCUR(dsv) >= pvlim) {
5179               truncated++;
5180               break;
5181          }
5182          u = utf8_to_uvchr_buf((U8*)s, (U8*)e, 0);
5183          if (u < 256) {
5184              const unsigned char c = (unsigned char)u & 0xFF;
5185              if (flags & UNI_DISPLAY_BACKSLASH) {
5186                  switch (c) {
5187                  case '\n':
5188                      ok = 'n'; break;
5189                  case '\r':
5190                      ok = 'r'; break;
5191                  case '\t':
5192                      ok = 't'; break;
5193                  case '\f':
5194                      ok = 'f'; break;
5195                  case '\a':
5196                      ok = 'a'; break;
5197                  case '\\':
5198                      ok = '\\'; break;
5199                  default: break;
5200                  }
5201                  if (ok) {
5202                      const char string = ok;
5203                      sv_catpvs(dsv, "\\");
5204                      sv_catpvn(dsv, &string, 1);
5205                  }
5206              }
5207              /* isPRINT() is the locale-blind version. */
5208              if (!ok && (flags & UNI_DISPLAY_ISPRINT) && isPRINT(c)) {
5209                  const char string = c;
5210                  sv_catpvn(dsv, &string, 1);
5211                  ok = 1;
5212              }
5213          }
5214          if (!ok)
5215              Perl_sv_catpvf(aTHX_ dsv, "\\x{%" UVxf "}", u);
5216     }
5217     if (truncated)
5218          sv_catpvs(dsv, "...");
5219
5220     return SvPVX(dsv);
5221 }
5222
5223 /*
5224 =for apidoc sv_uni_display
5225
5226 Build to the scalar C<dsv> a displayable version of the scalar C<sv>,
5227 the displayable version being at most C<pvlim> bytes long
5228 (if longer, the rest is truncated and "..." will be appended).
5229
5230 The C<flags> argument is as in L</pv_uni_display>().
5231
5232 The pointer to the PV of the C<dsv> is returned.
5233
5234 =cut
5235 */
5236 char *
5237 Perl_sv_uni_display(pTHX_ SV *dsv, SV *ssv, STRLEN pvlim, UV flags)
5238 {
5239     const char * const ptr =
5240         isREGEXP(ssv) ? RX_WRAPPED((REGEXP*)ssv) : SvPVX_const(ssv);
5241
5242     PERL_ARGS_ASSERT_SV_UNI_DISPLAY;
5243
5244     return Perl_pv_uni_display(aTHX_ dsv, (const U8*)ptr,
5245                                 SvCUR(ssv), pvlim, flags);
5246 }
5247
5248 /*
5249 =for apidoc foldEQ_utf8
5250
5251 Returns true if the leading portions of the strings C<s1> and C<s2> (either or
5252 both of which may be in UTF-8) are the same case-insensitively; false
5253 otherwise.  How far into the strings to compare is determined by other input
5254 parameters.
5255
5256 If C<u1> is true, the string C<s1> is assumed to be in UTF-8-encoded Unicode;
5257 otherwise it is assumed to be in native 8-bit encoding.  Correspondingly for
5258 C<u2> with respect to C<s2>.
5259
5260 If the byte length C<l1> is non-zero, it says how far into C<s1> to check for
5261 fold equality.  In other words, C<s1>+C<l1> will be used as a goal to reach.
5262 The scan will not be considered to be a match unless the goal is reached, and
5263 scanning won't continue past that goal.  Correspondingly for C<l2> with respect
5264 to C<s2>.
5265
5266 If C<pe1> is non-C<NULL> and the pointer it points to is not C<NULL>, that
5267 pointer is considered an end pointer to the position 1 byte past the maximum
5268 point in C<s1> beyond which scanning will not continue under any circumstances.
5269 (This routine assumes that UTF-8 encoded input strings are not malformed;
5270 malformed input can cause it to read past C<pe1>).  This means that if both
5271 C<l1> and C<pe1> are specified, and C<pe1> is less than C<s1>+C<l1>, the match
5272 will never be successful because it can never
5273 get as far as its goal (and in fact is asserted against).  Correspondingly for
5274 C<pe2> with respect to C<s2>.
5275
5276 At least one of C<s1> and C<s2> must have a goal (at least one of C<l1> and
5277 C<l2> must be non-zero), and if both do, both have to be
5278 reached for a successful match.   Also, if the fold of a character is multiple
5279 characters, all of them must be matched (see tr21 reference below for
5280 'folding').
5281
5282 Upon a successful match, if C<pe1> is non-C<NULL>,
5283 it will be set to point to the beginning of the I<next> character of C<s1>
5284 beyond what was matched.  Correspondingly for C<pe2> and C<s2>.
5285
5286 For case-insensitiveness, the "casefolding" of Unicode is used
5287 instead of upper/lowercasing both the characters, see
5288 L<http://www.unicode.org/unicode/reports/tr21/> (Case Mappings).
5289
5290 =cut */
5291
5292 /* A flags parameter has been added which may change, and hence isn't
5293  * externally documented.  Currently it is:
5294  *  0 for as-documented above
5295  *  FOLDEQ_UTF8_NOMIX_ASCII meaning that if a non-ASCII character folds to an
5296                             ASCII one, to not match
5297  *  FOLDEQ_LOCALE           is set iff the rules from the current underlying
5298  *                          locale are to be used.
5299  *  FOLDEQ_S1_ALREADY_FOLDED  s1 has already been folded before calling this
5300  *                          routine.  This allows that step to be skipped.
5301  *                          Currently, this requires s1 to be encoded as UTF-8
5302  *                          (u1 must be true), which is asserted for.
5303  *  FOLDEQ_S1_FOLDS_SANE    With either NOMIX_ASCII or LOCALE, no folds may
5304  *                          cross certain boundaries.  Hence, the caller should
5305  *                          let this function do the folding instead of
5306  *                          pre-folding.  This code contains an assertion to
5307  *                          that effect.  However, if the caller knows what
5308  *                          it's doing, it can pass this flag to indicate that,
5309  *                          and the assertion is skipped.
5310  *  FOLDEQ_S2_ALREADY_FOLDED  Similarly.
5311  *  FOLDEQ_S2_FOLDS_SANE
5312  */
5313 I32
5314 Perl_foldEQ_utf8_flags(pTHX_ const char *s1, char **pe1, UV l1, bool u1,
5315                              const char *s2, char **pe2, UV l2, bool u2,
5316                              U32 flags)
5317 {
5318     const U8 *p1  = (const U8*)s1; /* Point to current char */
5319     const U8 *p2  = (const U8*)s2;
5320     const U8 *g1 = NULL;       /* goal for s1 */
5321     const U8 *g2 = NULL;
5322     const U8 *e1 = NULL;       /* Don't scan s1 past this */
5323     U8 *f1 = NULL;             /* Point to current folded */
5324     const U8 *e2 = NULL;
5325     U8 *f2 = NULL;
5326     STRLEN n1 = 0, n2 = 0;              /* Number of bytes in current char */
5327     U8 foldbuf1[UTF8_MAXBYTES_CASE+1];
5328     U8 foldbuf2[UTF8_MAXBYTES_CASE+1];
5329     U8 flags_for_folder = FOLD_FLAGS_FULL;
5330
5331     PERL_ARGS_ASSERT_FOLDEQ_UTF8_FLAGS;
5332
5333     assert( ! ((flags & (FOLDEQ_UTF8_NOMIX_ASCII | FOLDEQ_LOCALE))
5334                && (((flags & FOLDEQ_S1_ALREADY_FOLDED)
5335                      && !(flags & FOLDEQ_S1_FOLDS_SANE))
5336                    || ((flags & FOLDEQ_S2_ALREADY_FOLDED)
5337                        && !(flags & FOLDEQ_S2_FOLDS_SANE)))));
5338     /* The algorithm is to trial the folds without regard to the flags on
5339      * the first line of the above assert(), and then see if the result
5340      * violates them.  This means that the inputs can't be pre-folded to a
5341      * violating result, hence the assert.  This could be changed, with the
5342      * addition of extra tests here for the already-folded case, which would
5343      * slow it down.  That cost is more than any possible gain for when these
5344      * flags are specified, as the flags indicate /il or /iaa matching which
5345      * is less common than /iu, and I (khw) also believe that real-world /il
5346      * and /iaa matches are most likely to involve code points 0-255, and this
5347      * function only under rare conditions gets called for 0-255. */
5348
5349     if (flags & FOLDEQ_LOCALE) {
5350         if (IN_UTF8_CTYPE_LOCALE) {
5351             flags &= ~FOLDEQ_LOCALE;
5352         }
5353         else {
5354             flags_for_folder |= FOLD_FLAGS_LOCALE;
5355         }
5356     }
5357
5358     if (pe1) {
5359         e1 = *(U8**)pe1;
5360     }
5361
5362     if (l1) {
5363         g1 = (const U8*)s1 + l1;
5364     }
5365
5366     if (pe2) {
5367         e2 = *(U8**)pe2;
5368     }
5369
5370     if (l2) {
5371         g2 = (const U8*)s2 + l2;
5372     }
5373
5374     /* Must have at least one goal */
5375     assert(g1 || g2);
5376
5377     if (g1) {
5378
5379         /* Will never match if goal is out-of-bounds */
5380         assert(! e1  || e1 >= g1);
5381
5382         /* Here, there isn't an end pointer, or it is beyond the goal.  We
5383         * only go as far as the goal */
5384         e1 = g1;
5385     }
5386     else {
5387         assert(e1);    /* Must have an end for looking at s1 */
5388     }
5389
5390     /* Same for goal for s2 */
5391     if (g2) {
5392         assert(! e2  || e2 >= g2);
5393         e2 = g2;
5394     }
5395     else {
5396         assert(e2);
5397     }
5398
5399     /* If both operands are already folded, we could just do a memEQ on the
5400      * whole strings at once, but it would be better if the caller realized
5401      * this and didn't even call us */
5402
5403     /* Look through both strings, a character at a time */
5404     while (p1 < e1 && p2 < e2) {
5405
5406         /* If at the beginning of a new character in s1, get its fold to use
5407          * and the length of the fold. */
5408         if (n1 == 0) {
5409             if (flags & FOLDEQ_S1_ALREADY_FOLDED) {
5410                 f1 = (U8 *) p1;
5411                 assert(u1);
5412                 n1 = UTF8SKIP(f1);
5413             }
5414             else {
5415                 if (isASCII(*p1) && ! (flags & FOLDEQ_LOCALE)) {
5416
5417                     /* We have to forbid mixing ASCII with non-ASCII if the
5418                      * flags so indicate.  And, we can short circuit having to
5419                      * call the general functions for this common ASCII case,
5420                      * all of whose non-locale folds are also ASCII, and hence
5421                      * UTF-8 invariants, so the UTF8ness of the strings is not
5422                      * relevant. */
5423                     if ((flags & FOLDEQ_UTF8_NOMIX_ASCII) && ! isASCII(*p2)) {
5424                         return 0;
5425                     }
5426                     n1 = 1;
5427                     *foldbuf1 = toFOLD(*p1);
5428                 }
5429                 else if (u1) {
5430                     _toFOLD_utf8_flags(p1, e1, foldbuf1, &n1, flags_for_folder);
5431                 }
5432                 else {  /* Not UTF-8, get UTF-8 fold */
5433                     _to_uni_fold_flags(*p1, foldbuf1, &n1, flags_for_folder);
5434                 }
5435                 f1 = foldbuf1;
5436             }
5437         }
5438
5439         if (n2 == 0) {    /* Same for s2 */
5440             if (flags & FOLDEQ_S2_ALREADY_FOLDED) {
5441                 f2 = (U8 *) p2;
5442                 assert(u2);
5443                 n2 = UTF8SKIP(f2);
5444             }
5445             else {
5446                 if (isASCII(*p2) && ! (flags & FOLDEQ_LOCALE)) {
5447                     if ((flags & FOLDEQ_UTF8_NOMIX_ASCII) && ! isASCII(*p1)) {
5448                         return 0;
5449                     }
5450                     n2 = 1;
5451                     *foldbuf2 = toFOLD(*p2);
5452                 }
5453                 else if (u2) {
5454                     _toFOLD_utf8_flags(p2, e2, foldbuf2, &n2, flags_for_folder);
5455                 }
5456                 else {
5457                     _to_uni_fold_flags(*p2, foldbuf2, &n2, flags_for_folder);
5458                 }
5459                 f2 = foldbuf2;
5460             }
5461         }
5462
5463         /* Here f1 and f2 point to the beginning of the strings to compare.
5464          * These strings are the folds of the next character from each input
5465          * string, stored in UTF-8. */
5466
5467         /* While there is more to look for in both folds, see if they
5468         * continue to match */
5469         while (n1 && n2) {
5470             U8 fold_length = UTF8SKIP(f1);
5471             if (fold_length != UTF8SKIP(f2)
5472                 || (fold_length == 1 && *f1 != *f2) /* Short circuit memNE
5473                                                        function call for single
5474                                                        byte */
5475                 || memNE((char*)f1, (char*)f2, fold_length))
5476             {
5477                 return 0; /* mismatch */
5478             }
5479
5480             /* Here, they matched, advance past them */
5481             n1 -= fold_length;
5482             f1 += fold_length;
5483             n2 -= fold_length;
5484             f2 += fold_length;
5485         }
5486
5487         /* When reach the end of any fold, advance the input past it */
5488         if (n1 == 0) {
5489             p1 += u1 ? UTF8SKIP(p1) : 1;
5490         }
5491         if (n2 == 0) {
5492             p2 += u2 ? UTF8SKIP(p2) : 1;
5493         }
5494     } /* End of loop through both strings */
5495
5496     /* A match is defined by each scan that specified an explicit length
5497     * reaching its final goal, and the other not having matched a partial
5498     * character (which can happen when the fold of a character is more than one
5499     * character). */
5500     if (! ((g1 == 0 || p1 == g1) && (g2 == 0 || p2 == g2)) || n1 || n2) {
5501         return 0;
5502     }
5503
5504     /* Successful match.  Set output pointers */
5505     if (pe1) {
5506         *pe1 = (char*)p1;
5507     }
5508     if (pe2) {
5509         *pe2 = (char*)p2;
5510     }
5511     return 1;
5512 }
5513
5514 /* XXX The next two functions should likely be moved to mathoms.c once all
5515  * occurrences of them are removed from the core; some cpan-upstream modules
5516  * still use them */
5517
5518 U8 *
5519 Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
5520 {
5521     PERL_ARGS_ASSERT_UVUNI_TO_UTF8;
5522
5523     return Perl_uvoffuni_to_utf8_flags(aTHX_ d, uv, 0);
5524 }
5525
5526 /*
5527 =for apidoc utf8n_to_uvuni
5528
5529 Instead use L</utf8_to_uvchr_buf>, or rarely, L</utf8n_to_uvchr>.
5530
5531 This function was useful for code that wanted to handle both EBCDIC and
5532 ASCII platforms with Unicode properties, but starting in Perl v5.20, the
5533 distinctions between the platforms have mostly been made invisible to most
5534 code, so this function is quite unlikely to be what you want.  If you do need
5535 this precise functionality, use instead
5536 C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|/utf8_to_uvchr_buf>>
5537 or C<L<NATIVE_TO_UNI(utf8n_to_uvchr(...))|/utf8n_to_uvchr>>.
5538
5539 =cut
5540 */
5541
5542 UV
5543 Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
5544 {
5545     PERL_ARGS_ASSERT_UTF8N_TO_UVUNI;
5546
5547     return NATIVE_TO_UNI(utf8n_to_uvchr(s, curlen, retlen, flags));
5548 }
5549
5550 /*
5551 =for apidoc uvuni_to_utf8_flags
5552
5553 Instead you almost certainly want to use L</uvchr_to_utf8> or
5554 L</uvchr_to_utf8_flags>.
5555
5556 This function is a deprecated synonym for L</uvoffuni_to_utf8_flags>,
5557 which itself, while not deprecated, should be used only in isolated
5558 circumstances.  These functions were useful for code that wanted to handle
5559 both EBCDIC and ASCII platforms with Unicode properties, but starting in Perl
5560 v5.20, the distinctions between the platforms have mostly been made invisible
5561 to most code, so this function is quite unlikely to be what you want.
5562
5563 =cut
5564 */
5565
5566 U8 *
5567 Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
5568 {
5569     PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS;
5570
5571     return uvoffuni_to_utf8_flags(d, uv, flags);
5572 }
5573
5574 /*
5575  * ex: set ts=8 sts=4 sw=4 et:
5576  */