This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
t/re/pat_advanced.t: Revise some tests
[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 #define HANDLE_UNICODE_SURROGATE(uv, flags)                         \
120     STMT_START {                                                    \
121         if (flags & UNICODE_WARN_SURROGATE) {                       \
122             Perl_ck_warner_d(aTHX_ packWARN(WARN_SURROGATE),        \
123                                 "UTF-16 surrogate U+%04" UVXf, uv); \
124         }                                                           \
125         if (flags & UNICODE_DISALLOW_SURROGATE) {                   \
126             return NULL;                                            \
127         }                                                           \
128     } STMT_END;
129
130 #define HANDLE_UNICODE_NONCHAR(uv, flags)                           \
131     STMT_START {                                                    \
132         if (flags & UNICODE_WARN_NONCHAR) {                         \
133             Perl_ck_warner_d(aTHX_ packWARN(WARN_NONCHAR),          \
134                  "Unicode non-character U+%04" UVXf " is not "      \
135                  "recommended for open interchange", uv);           \
136         }                                                           \
137         if (flags & UNICODE_DISALLOW_NONCHAR) {                     \
138             return NULL;                                            \
139         }                                                           \
140     } STMT_END;
141
142 /*  Use shorter names internally in this file */
143 #define SHIFT   UTF_ACCUMULATION_SHIFT
144 #undef  MARK
145 #define MARK    UTF_CONTINUATION_MARK
146 #define MASK    UTF_CONTINUATION_MASK
147
148 U8 *
149 Perl_uvoffuni_to_utf8_flags(pTHX_ U8 *d, UV uv, const UV flags)
150 {
151     PERL_ARGS_ASSERT_UVOFFUNI_TO_UTF8_FLAGS;
152
153     if (OFFUNI_IS_INVARIANT(uv)) {
154         *d++ = LATIN1_TO_NATIVE(uv);
155         return d;
156     }
157
158     if (uv <= MAX_UTF8_TWO_BYTE) {
159         *d++ = I8_TO_NATIVE_UTF8(( uv >> SHIFT) | UTF_START_MARK(2));
160         *d++ = I8_TO_NATIVE_UTF8(( uv           & MASK) |   MARK);
161         return d;
162     }
163
164     /* Not 2-byte; test for and handle 3-byte result.   In the test immediately
165      * below, the 16 is for start bytes E0-EF (which are all the possible ones
166      * for 3 byte characters).  The 2 is for 2 continuation bytes; these each
167      * contribute SHIFT bits.  This yields 0x4000 on EBCDIC platforms, 0x1_0000
168      * on ASCII; so 3 bytes covers the range 0x400-0x3FFF on EBCDIC;
169      * 0x800-0xFFFF on ASCII */
170     if (uv < (16 * (1U << (2 * SHIFT)))) {
171         *d++ = I8_TO_NATIVE_UTF8(( uv >> ((3 - 1) * SHIFT)) | UTF_START_MARK(3));
172         *d++ = I8_TO_NATIVE_UTF8(((uv >> ((2 - 1) * SHIFT)) & MASK) |   MARK);
173         *d++ = I8_TO_NATIVE_UTF8(( uv  /* (1 - 1) */        & MASK) |   MARK);
174
175 #ifndef EBCDIC  /* These problematic code points are 4 bytes on EBCDIC, so
176                    aren't tested here */
177         /* The most likely code points in this range are below the surrogates.
178          * Do an extra test to quickly exclude those. */
179         if (UNLIKELY(uv >= UNICODE_SURROGATE_FIRST)) {
180             if (UNLIKELY(   UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv)
181                          || UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv)))
182             {
183                 HANDLE_UNICODE_NONCHAR(uv, flags);
184             }
185             else if (UNLIKELY(UNICODE_IS_SURROGATE(uv))) {
186                 HANDLE_UNICODE_SURROGATE(uv, flags);
187             }
188         }
189 #endif
190         return d;
191     }
192
193     /* Not 3-byte; that means the code point is at least 0x1_0000 on ASCII
194      * platforms, and 0x4000 on EBCDIC.  There are problematic cases that can
195      * happen starting with 4-byte characters on ASCII platforms.  We unify the
196      * code for these with EBCDIC, even though some of them require 5-bytes on
197      * those, because khw believes the code saving is worth the very slight
198      * performance hit on these high EBCDIC code points. */
199
200     if (UNLIKELY(UNICODE_IS_SUPER(uv))) {
201         if (   UNLIKELY(uv > MAX_NON_DEPRECATED_CP)
202             && ckWARN_d(WARN_DEPRECATED))
203         {
204             Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
205                         cp_above_legal_max, uv, MAX_NON_DEPRECATED_CP);
206         }
207         if (   (flags & UNICODE_WARN_SUPER)
208             || (   UNICODE_IS_ABOVE_31_BIT(uv)
209                 && (flags & UNICODE_WARN_ABOVE_31_BIT)))
210         {
211             Perl_ck_warner_d(aTHX_ packWARN(WARN_NON_UNICODE),
212
213               /* Choose the more dire applicable warning */
214               (UNICODE_IS_ABOVE_31_BIT(uv))
215               ? "Code point 0x%" UVXf " is not Unicode, and not portable"
216               : "Code point 0x%" UVXf " is not Unicode, may not be portable",
217              uv);
218         }
219         if (flags & UNICODE_DISALLOW_SUPER
220             || (   UNICODE_IS_ABOVE_31_BIT(uv)
221                 && (flags & UNICODE_DISALLOW_ABOVE_31_BIT)))
222         {
223             return NULL;
224         }
225     }
226     else if (UNLIKELY(UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv))) {
227         HANDLE_UNICODE_NONCHAR(uv, flags);
228     }
229
230     /* Test for and handle 4-byte result.   In the test immediately below, the
231      * 8 is for start bytes F0-F7 (which are all the possible ones for 4 byte
232      * characters).  The 3 is for 3 continuation bytes; these each contribute
233      * SHIFT bits.  This yields 0x4_0000 on EBCDIC platforms, 0x20_0000 on
234      * ASCII, so 4 bytes covers the range 0x4000-0x3_FFFF on EBCDIC;
235      * 0x1_0000-0x1F_FFFF on ASCII */
236     if (uv < (8 * (1U << (3 * SHIFT)))) {
237         *d++ = I8_TO_NATIVE_UTF8(( uv >> ((4 - 1) * SHIFT)) | UTF_START_MARK(4));
238         *d++ = I8_TO_NATIVE_UTF8(((uv >> ((3 - 1) * SHIFT)) & MASK) |   MARK);
239         *d++ = I8_TO_NATIVE_UTF8(((uv >> ((2 - 1) * SHIFT)) & MASK) |   MARK);
240         *d++ = I8_TO_NATIVE_UTF8(( uv  /* (1 - 1) */        & MASK) |   MARK);
241
242 #ifdef EBCDIC   /* These were handled on ASCII platforms in the code for 3-byte
243                    characters.  The end-plane non-characters for EBCDIC were
244                    handled just above */
245         if (UNLIKELY(UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv))) {
246             HANDLE_UNICODE_NONCHAR(uv, flags);
247         }
248         else if (UNLIKELY(UNICODE_IS_SURROGATE(uv))) {
249             HANDLE_UNICODE_SURROGATE(uv, flags);
250         }
251 #endif
252
253         return d;
254     }
255
256     /* Not 4-byte; that means the code point is at least 0x20_0000 on ASCII
257      * platforms, and 0x4000 on EBCDIC.  At this point we switch to a loop
258      * format.  The unrolled version above turns out to not save all that much
259      * time, and at these high code points (well above the legal Unicode range
260      * on ASCII platforms, and well above anything in common use in EBCDIC),
261      * khw believes that less code outweighs slight performance gains. */
262
263     {
264         STRLEN len  = OFFUNISKIP(uv);
265         U8 *p = d+len-1;
266         while (p > d) {
267             *p-- = I8_TO_NATIVE_UTF8((uv & UTF_CONTINUATION_MASK) | UTF_CONTINUATION_MARK);
268             uv >>= UTF_ACCUMULATION_SHIFT;
269         }
270         *p = I8_TO_NATIVE_UTF8((uv & UTF_START_MASK(len)) | UTF_START_MARK(len));
271         return d+len;
272     }
273 }
274
275 /*
276 =for apidoc uvchr_to_utf8
277
278 Adds the UTF-8 representation of the native code point C<uv> to the end
279 of the string C<d>; C<d> should have at least C<UVCHR_SKIP(uv)+1> (up to
280 C<UTF8_MAXBYTES+1>) free bytes available.  The return value is the pointer to
281 the byte after the end of the new character.  In other words,
282
283     d = uvchr_to_utf8(d, uv);
284
285 is the recommended wide native character-aware way of saying
286
287     *(d++) = uv;
288
289 This function accepts any UV as input, but very high code points (above
290 C<IV_MAX> on the platform)  will raise a deprecation warning.  This is
291 typically 0x7FFF_FFFF in a 32-bit word.
292
293 It is possible to forbid or warn on non-Unicode code points, or those that may
294 be problematic by using L</uvchr_to_utf8_flags>.
295
296 =cut
297 */
298
299 /* This is also a macro */
300 PERL_CALLCONV U8*       Perl_uvchr_to_utf8(pTHX_ U8 *d, UV uv);
301
302 U8 *
303 Perl_uvchr_to_utf8(pTHX_ U8 *d, UV uv)
304 {
305     return uvchr_to_utf8(d, uv);
306 }
307
308 /*
309 =for apidoc uvchr_to_utf8_flags
310
311 Adds the UTF-8 representation of the native code point C<uv> to the end
312 of the string C<d>; C<d> should have at least C<UVCHR_SKIP(uv)+1> (up to
313 C<UTF8_MAXBYTES+1>) free bytes available.  The return value is the pointer to
314 the byte after the end of the new character.  In other words,
315
316     d = uvchr_to_utf8_flags(d, uv, flags);
317
318 or, in most cases,
319
320     d = uvchr_to_utf8_flags(d, uv, 0);
321
322 This is the Unicode-aware way of saying
323
324     *(d++) = uv;
325
326 If C<flags> is 0, this function accepts any UV as input, but very high code
327 points (above C<IV_MAX> for the platform)  will raise a deprecation warning.
328 This is typically 0x7FFF_FFFF in a 32-bit word.
329
330 Specifying C<flags> can further restrict what is allowed and not warned on, as
331 follows:
332
333 If C<uv> is a Unicode surrogate code point and C<UNICODE_WARN_SURROGATE> is set,
334 the function will raise a warning, provided UTF8 warnings are enabled.  If
335 instead C<UNICODE_DISALLOW_SURROGATE> is set, the function will fail and return
336 NULL.  If both flags are set, the function will both warn and return NULL.
337
338 Similarly, the C<UNICODE_WARN_NONCHAR> and C<UNICODE_DISALLOW_NONCHAR> flags
339 affect how the function handles a Unicode non-character.
340
341 And likewise, the C<UNICODE_WARN_SUPER> and C<UNICODE_DISALLOW_SUPER> flags
342 affect the handling of code points that are above the Unicode maximum of
343 0x10FFFF.  Languages other than Perl may not be able to accept files that
344 contain these.
345
346 The flag C<UNICODE_WARN_ILLEGAL_INTERCHANGE> selects all three of
347 the above WARN flags; and C<UNICODE_DISALLOW_ILLEGAL_INTERCHANGE> selects all
348 three DISALLOW flags.  C<UNICODE_DISALLOW_ILLEGAL_INTERCHANGE> restricts the
349 allowed inputs to the strict UTF-8 traditionally defined by Unicode.
350 Similarly, C<UNICODE_WARN_ILLEGAL_C9_INTERCHANGE> and
351 C<UNICODE_DISALLOW_ILLEGAL_C9_INTERCHANGE> are shortcuts to select the
352 above-Unicode and surrogate flags, but not the non-character ones, as
353 defined in
354 L<Unicode Corrigendum #9|http://www.unicode.org/versions/corrigendum9.html>.
355 See L<perlunicode/Noncharacter code points>.
356
357 Code points above 0x7FFF_FFFF (2**31 - 1) were never specified in any standard,
358 so using them is more problematic than other above-Unicode code points.  Perl
359 invented an extension to UTF-8 to represent the ones above 2**36-1, so it is
360 likely that non-Perl languages will not be able to read files that contain
361 these that written by the perl interpreter; nor would Perl understand files
362 written by something that uses a different extension.  For these reasons, there
363 is a separate set of flags that can warn and/or disallow these extremely high
364 code points, even if other above-Unicode ones are accepted.  These are the
365 C<UNICODE_WARN_ABOVE_31_BIT> and C<UNICODE_DISALLOW_ABOVE_31_BIT> flags.  These
366 are entirely independent from the deprecation warning for code points above
367 C<IV_MAX>.  On 32-bit machines, it will eventually be forbidden to have any
368 code point that needs more than 31 bits to represent.  When that happens,
369 effectively the C<UNICODE_DISALLOW_ABOVE_31_BIT> flag will always be set on
370 32-bit machines.  (Of course C<UNICODE_DISALLOW_SUPER> will treat all
371 above-Unicode code points, including these, as malformations; and
372 C<UNICODE_WARN_SUPER> warns on these.)
373
374 On EBCDIC platforms starting in Perl v5.24, the Perl extension for representing
375 extremely high code points kicks in at 0x3FFF_FFFF (2**30 -1), which is lower
376 than on ASCII.  Prior to that, code points 2**31 and higher were simply
377 unrepresentable, and a different, incompatible method was used to represent
378 code points between 2**30 and 2**31 - 1.  The flags C<UNICODE_WARN_ABOVE_31_BIT>
379 and C<UNICODE_DISALLOW_ABOVE_31_BIT> have the same function as on ASCII
380 platforms, warning and disallowing 2**31 and higher.
381
382 =cut
383 */
384
385 /* This is also a macro */
386 PERL_CALLCONV U8*       Perl_uvchr_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags);
387
388 U8 *
389 Perl_uvchr_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
390 {
391     return uvchr_to_utf8_flags(d, uv, flags);
392 }
393
394 PERL_STATIC_INLINE bool
395 S_is_utf8_cp_above_31_bits(const U8 * const s, const U8 * const e)
396 {
397     /* Returns TRUE if the first code point represented by the Perl-extended-
398      * UTF-8-encoded string starting at 's', and looking no further than 'e -
399      * 1' doesn't fit into 31 bytes.  That is, that if it is >= 2**31.
400      *
401      * The function handles the case where the input bytes do not include all
402      * the ones necessary to represent a full character.  That is, they may be
403      * the intial bytes of the representation of a code point, but possibly
404      * the final ones necessary for the complete representation may be beyond
405      * 'e - 1'.
406      *
407      * The function assumes that the sequence is well-formed UTF-8 as far as it
408      * goes, and is for a UTF-8 variant code point.  If the sequence is
409      * incomplete, the function returns FALSE if there is any well-formed
410      * UTF-8 byte sequence that can complete it in such a way that a code point
411      * < 2**31 is produced; otherwise it returns TRUE.
412      *
413      * Getting this exactly right is slightly tricky, and has to be done in
414      * several places in this file, so is centralized here.  It is based on the
415      * following table:
416      *
417      * U+7FFFFFFF (2 ** 31 - 1)
418      *      ASCII: \xFD\xBF\xBF\xBF\xBF\xBF
419      *   IBM-1047: \xFE\x41\x41\x41\x41\x41\x41\x42\x73\x73\x73\x73\x73\x73
420      *    IBM-037: \xFE\x41\x41\x41\x41\x41\x41\x42\x72\x72\x72\x72\x72\x72
421      *   POSIX-BC: \xFE\x41\x41\x41\x41\x41\x41\x42\x75\x75\x75\x75\x75\x75
422      *         I8: \xFF\xA0\xA0\xA0\xA0\xA0\xA0\xA1\xBF\xBF\xBF\xBF\xBF\xBF
423      * U+80000000 (2 ** 31):
424      *      ASCII: \xFE\x82\x80\x80\x80\x80\x80
425      *              [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 10  11  12  13
426      *   IBM-1047: \xFE\x41\x41\x41\x41\x41\x41\x43\x41\x41\x41\x41\x41\x41
427      *    IBM-037: \xFE\x41\x41\x41\x41\x41\x41\x43\x41\x41\x41\x41\x41\x41
428      *   POSIX-BC: \xFE\x41\x41\x41\x41\x41\x41\x43\x41\x41\x41\x41\x41\x41
429      *         I8: \xFF\xA0\xA0\xA0\xA0\xA0\xA0\xA2\xA0\xA0\xA0\xA0\xA0\xA0
430      */
431
432 #ifdef EBCDIC
433
434     /* [0] is start byte  [1] [2] [3] [4] [5] [6] [7] */
435     const U8 prefix[] = "\x41\x41\x41\x41\x41\x41\x42";
436     const STRLEN prefix_len = sizeof(prefix) - 1;
437     const STRLEN len = e - s;
438     const STRLEN cmp_len = MIN(prefix_len, len - 1);
439
440 #else
441
442     PERL_UNUSED_ARG(e);
443
444 #endif
445
446     PERL_ARGS_ASSERT_IS_UTF8_CP_ABOVE_31_BITS;
447
448     assert(! UTF8_IS_INVARIANT(*s));
449
450 #ifndef EBCDIC
451
452     /* Technically, a start byte of FE can be for a code point that fits into
453      * 31 bytes, but not for well-formed UTF-8: doing that requires an overlong
454      * malformation. */
455     return (*s >= 0xFE);
456
457 #else
458
459     /* On the EBCDIC code pages we handle, only 0xFE can mean a 32-bit or
460      * larger code point (0xFF is an invariant).  For 0xFE, we need at least 2
461      * bytes, and maybe up through 8 bytes, to be sure if the value is above 31
462      * bits. */
463     if (*s != 0xFE || len == 1) {
464         return FALSE;
465     }
466
467     /* Note that in UTF-EBCDIC, the two lowest possible continuation bytes are
468      * \x41 and \x42. */
469     return cBOOL(memGT(s + 1, prefix, cmp_len));
470
471 #endif
472
473 }
474
475 /* Anything larger than this will overflow the word if it were converted into a UV */
476 #if defined(UV_IS_QUAD)
477 #  ifdef EBCDIC     /* Actually is I8 */
478 #   define HIGHEST_REPRESENTABLE_UTF8                                       \
479                 "\xFF\xAF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF"
480 #  else
481 #   define HIGHEST_REPRESENTABLE_UTF8                                       \
482                 "\xFF\x80\x8F\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF"
483 #  endif
484 #else   /* 32-bit */
485 #  ifdef EBCDIC
486 #   define HIGHEST_REPRESENTABLE_UTF8                                       \
487                 "\xFF\xA0\xA0\xA0\xA0\xA0\xA0\xA3\xBF\xBF\xBF\xBF\xBF\xBF"
488 #  else
489 #   define HIGHEST_REPRESENTABLE_UTF8  "\xFE\x83\xBF\xBF\xBF\xBF\xBF"
490 #  endif
491 #endif
492
493 PERL_STATIC_INLINE bool
494 S_does_utf8_overflow(const U8 * const s, const U8 * e)
495 {
496     const U8 *x;
497     const U8 * y = (const U8 *) HIGHEST_REPRESENTABLE_UTF8;
498
499 #if ! defined(UV_IS_QUAD) && ! defined(EBCDIC)
500
501     const STRLEN len = e - s;
502
503 #endif
504
505     /* Returns a boolean as to if this UTF-8 string would overflow a UV on this
506      * platform, that is if it represents a code point larger than the highest
507      * representable code point.  (For ASCII platforms, we could use memcmp()
508      * because we don't have to convert each byte to I8, but it's very rare
509      * input indeed that would approach overflow, so the loop below will likely
510      * only get executed once.
511      *
512      * 'e' must not be beyond a full character.  If it is less than a full
513      * character, the function returns FALSE if there is any input beyond 'e'
514      * that could result in a non-overflowing code point */
515
516     PERL_ARGS_ASSERT_DOES_UTF8_OVERFLOW;
517     assert(s <= e && s + UTF8SKIP(s) >= e);
518
519 #if ! defined(UV_IS_QUAD) && ! defined(EBCDIC)
520
521     /* On 32 bit ASCII machines, many overlongs that start with FF don't
522      * overflow */
523
524     if (isFF_OVERLONG(s, len)) {
525         const U8 max_32_bit_overlong[] = "\xFF\x80\x80\x80\x80\x80\x80\x84";
526         return memGE(s, max_32_bit_overlong,
527                                 MIN(len, sizeof(max_32_bit_overlong) - 1));
528     }
529
530 #endif
531
532     for (x = s; x < e; x++, y++) {
533
534         /* If this byte is larger than the corresponding highest UTF-8 byte, it
535          * overflows */
536         if (UNLIKELY(NATIVE_UTF8_TO_I8(*x) > *y)) {
537             return TRUE;
538         }
539
540         /* If not the same as this byte, it must be smaller, doesn't overflow */
541         if (LIKELY(NATIVE_UTF8_TO_I8(*x) != *y)) {
542             return FALSE;
543         }
544     }
545
546     /* Got to the end and all bytes are the same.  If the input is a whole
547      * character, it doesn't overflow.  And if it is a partial character,
548      * there's not enough information to tell, so assume doesn't overflow */
549     return FALSE;
550 }
551
552 PERL_STATIC_INLINE bool
553 S_is_utf8_overlong_given_start_byte_ok(const U8 * const s, const STRLEN len)
554 {
555     /* Overlongs can occur whenever the number of continuation bytes
556      * changes.  That means whenever the number of leading 1 bits in a start
557      * byte increases from the next lower start byte.  That happens for start
558      * bytes C0, E0, F0, F8, FC, FE, and FF.  On modern perls, the following
559      * illegal start bytes have already been excluded, so don't need to be
560      * tested here;
561      * ASCII platforms: C0, C1
562      * EBCDIC platforms C0, C1, C2, C3, C4, E0
563      *
564      * At least a second byte is required to determine if other sequences will
565      * be an overlong. */
566
567     const U8 s0 = NATIVE_UTF8_TO_I8(s[0]);
568     const U8 s1 = NATIVE_UTF8_TO_I8(s[1]);
569
570     PERL_ARGS_ASSERT_IS_UTF8_OVERLONG_GIVEN_START_BYTE_OK;
571     assert(len > 1 && UTF8_IS_START(*s));
572
573     /* Each platform has overlongs after the start bytes given above (expressed
574      * in I8 for EBCDIC).  What constitutes an overlong varies by platform, but
575      * the logic is the same, except the E0 overlong has already been excluded
576      * on EBCDIC platforms.   The  values below were found by manually
577      * inspecting the UTF-8 patterns.  See the tables in utf8.h and
578      * utfebcdic.h. */
579
580 #       ifdef EBCDIC
581 #           define F0_ABOVE_OVERLONG 0xB0
582 #           define F8_ABOVE_OVERLONG 0xA8
583 #           define FC_ABOVE_OVERLONG 0xA4
584 #           define FE_ABOVE_OVERLONG 0xA2
585 #           define FF_OVERLONG_PREFIX "\xfe\x41\x41\x41\x41\x41\x41\x41"
586                                     /* I8(0xfe) is FF */
587 #       else
588
589     if (s0 == 0xE0 && UNLIKELY(s1 < 0xA0)) {
590         return TRUE;
591     }
592
593 #           define F0_ABOVE_OVERLONG 0x90
594 #           define F8_ABOVE_OVERLONG 0x88
595 #           define FC_ABOVE_OVERLONG 0x84
596 #           define FE_ABOVE_OVERLONG 0x82
597 #           define FF_OVERLONG_PREFIX "\xff\x80\x80\x80\x80\x80\x80"
598 #       endif
599
600
601     if (   (s0 == 0xF0 && UNLIKELY(s1 < F0_ABOVE_OVERLONG))
602         || (s0 == 0xF8 && UNLIKELY(s1 < F8_ABOVE_OVERLONG))
603         || (s0 == 0xFC && UNLIKELY(s1 < FC_ABOVE_OVERLONG))
604         || (s0 == 0xFE && UNLIKELY(s1 < FE_ABOVE_OVERLONG)))
605     {
606         return TRUE;
607     }
608
609     /* Check for the FF overlong */
610     return isFF_OVERLONG(s, len);
611 }
612
613 PERL_STATIC_INLINE bool
614 S_isFF_OVERLONG(const U8 * const s, const STRLEN len)
615 {
616     PERL_ARGS_ASSERT_ISFF_OVERLONG;
617
618     /* Check for the FF overlong.  This happens only if all these bytes match;
619      * what comes after them doesn't matter.  See tables in utf8.h,
620      * utfebcdic.h. */
621
622     return    len >= sizeof(FF_OVERLONG_PREFIX) - 1
623            && UNLIKELY(memEQ(s, FF_OVERLONG_PREFIX,
624                                             sizeof(FF_OVERLONG_PREFIX) - 1));
625 }
626
627 #undef F0_ABOVE_OVERLONG
628 #undef F8_ABOVE_OVERLONG
629 #undef FC_ABOVE_OVERLONG
630 #undef FE_ABOVE_OVERLONG
631 #undef FF_OVERLONG_PREFIX
632
633 STRLEN
634 Perl__is_utf8_char_helper(const U8 * const s, const U8 * e, const U32 flags)
635 {
636     STRLEN len;
637     const U8 *x;
638
639     /* A helper function that should not be called directly.
640      *
641      * This function returns non-zero if the string beginning at 's' and
642      * looking no further than 'e - 1' is well-formed Perl-extended-UTF-8 for a
643      * code point; otherwise it returns 0.  The examination stops after the
644      * first code point in 's' is validated, not looking at the rest of the
645      * input.  If 'e' is such that there are not enough bytes to represent a
646      * complete code point, this function will return non-zero anyway, if the
647      * bytes it does have are well-formed UTF-8 as far as they go, and aren't
648      * excluded by 'flags'.
649      *
650      * A non-zero return gives the number of bytes required to represent the
651      * code point.  Be aware that if the input is for a partial character, the
652      * return will be larger than 'e - s'.
653      *
654      * This function assumes that the code point represented is UTF-8 variant.
655      * The caller should have excluded this possibility before calling this
656      * function.
657      *
658      * 'flags' can be 0, or any combination of the UTF8_DISALLOW_foo flags
659      * accepted by L</utf8n_to_uvchr>.  If non-zero, this function will return
660      * 0 if the code point represented is well-formed Perl-extended-UTF-8, but
661      * disallowed by the flags.  If the input is only for a partial character,
662      * the function will return non-zero if there is any sequence of
663      * well-formed UTF-8 that, when appended to the input sequence, could
664      * result in an allowed code point; otherwise it returns 0.  Non characters
665      * cannot be determined based on partial character input.  But many  of the
666      * other excluded types can be determined with just the first one or two
667      * bytes.
668      *
669      */
670
671     PERL_ARGS_ASSERT__IS_UTF8_CHAR_HELPER;
672
673     assert(0 == (flags & ~(UTF8_DISALLOW_ILLEGAL_INTERCHANGE
674                           |UTF8_DISALLOW_ABOVE_31_BIT)));
675     assert(! UTF8_IS_INVARIANT(*s));
676
677     /* A variant char must begin with a start byte */
678     if (UNLIKELY(! UTF8_IS_START(*s))) {
679         return 0;
680     }
681
682     /* Examine a maximum of a single whole code point */
683     if (e - s > UTF8SKIP(s)) {
684         e = s + UTF8SKIP(s);
685     }
686
687     len = e - s;
688
689     if (flags && isUTF8_POSSIBLY_PROBLEMATIC(*s)) {
690         const U8 s0 = NATIVE_UTF8_TO_I8(s[0]);
691
692         /* The code below is derived from this table.  Keep in mind that legal
693          * continuation bytes range between \x80..\xBF for UTF-8, and
694          * \xA0..\xBF for I8.  Anything above those aren't continuation bytes.
695          * Hence, we don't have to test the upper edge because if any of those
696          * are encountered, the sequence is malformed, and will fail elsewhere
697          * in this function.
698          *              UTF-8            UTF-EBCDIC I8
699          *   U+D800: \xED\xA0\x80      \xF1\xB6\xA0\xA0      First surrogate
700          *   U+DFFF: \xED\xBF\xBF      \xF1\xB7\xBF\xBF      Final surrogate
701          * U+110000: \xF4\x90\x80\x80  \xF9\xA2\xA0\xA0\xA0  First above Unicode
702          *
703          */
704
705 #ifdef EBCDIC   /* On EBCDIC, these are actually I8 bytes */
706 #  define FIRST_START_BYTE_THAT_IS_DEFINITELY_SUPER  0xFA
707 #  define IS_UTF8_2_BYTE_SUPER(s0, s1)           ((s0) == 0xF9 && (s1) >= 0xA2)
708
709 #  define IS_UTF8_2_BYTE_SURROGATE(s0, s1)       ((s0) == 0xF1              \
710                                                        /* B6 and B7 */      \
711                                               && ((s1) & 0xFE ) == 0xB6)
712 #else
713 #  define FIRST_START_BYTE_THAT_IS_DEFINITELY_SUPER  0xF5
714 #  define IS_UTF8_2_BYTE_SUPER(s0, s1)           ((s0) == 0xF4 && (s1) >= 0x90)
715 #  define IS_UTF8_2_BYTE_SURROGATE(s0, s1)       ((s0) == 0xED && (s1) >= 0xA0)
716 #endif
717
718         if (  (flags & UTF8_DISALLOW_SUPER)
719             && UNLIKELY(s0 >= FIRST_START_BYTE_THAT_IS_DEFINITELY_SUPER))
720         {
721             return 0;           /* Above Unicode */
722         }
723
724         if (   (flags & UTF8_DISALLOW_ABOVE_31_BIT)
725             &&  UNLIKELY(is_utf8_cp_above_31_bits(s, e)))
726         {
727             return 0;           /* Above 31 bits */
728         }
729
730         if (len > 1) {
731             const U8 s1 = NATIVE_UTF8_TO_I8(s[1]);
732
733             if (   (flags & UTF8_DISALLOW_SUPER)
734                 &&  UNLIKELY(IS_UTF8_2_BYTE_SUPER(s0, s1)))
735             {
736                 return 0;       /* Above Unicode */
737             }
738
739             if (   (flags & UTF8_DISALLOW_SURROGATE)
740                 &&  UNLIKELY(IS_UTF8_2_BYTE_SURROGATE(s0, s1)))
741             {
742                 return 0;       /* Surrogate */
743             }
744
745             if (  (flags & UTF8_DISALLOW_NONCHAR)
746                 && UNLIKELY(UTF8_IS_NONCHAR(s, e)))
747             {
748                 return 0;       /* Noncharacter code point */
749             }
750         }
751     }
752
753     /* Make sure that all that follows are continuation bytes */
754     for (x = s + 1; x < e; x++) {
755         if (UNLIKELY(! UTF8_IS_CONTINUATION(*x))) {
756             return 0;
757         }
758     }
759
760     /* Here is syntactically valid.  Next, make sure this isn't the start of an
761      * overlong. */
762     if (len > 1 && is_utf8_overlong_given_start_byte_ok(s, len)) {
763         return 0;
764     }
765
766     /* And finally, that the code point represented fits in a word on this
767      * platform */
768     if (does_utf8_overflow(s, e)) {
769         return 0;
770     }
771
772     return UTF8SKIP(s);
773 }
774
775 char *
776 Perl__byte_dump_string(pTHX_ const U8 * s, const STRLEN len, const bool format)
777 {
778     /* Returns a mortalized C string that is a displayable copy of the 'len'
779      * bytes starting at 's'.  'format' gives how to display each byte.
780      * Currently, there are only two formats, so it is currently a bool:
781      *      0   \xab
782      *      1    ab         (that is a space between two hex digit bytes)
783      */
784
785     const STRLEN output_len = 4 * len + 1;  /* 4 bytes per each input, plus a
786                                                trailing NUL */
787     const U8 * const e = s + len;
788     char * output;
789     char * d;
790
791     PERL_ARGS_ASSERT__BYTE_DUMP_STRING;
792
793     Newx(output, output_len, char);
794     SAVEFREEPV(output);
795
796     d = output;
797     for (; s < e; s++) {
798         const unsigned high_nibble = (*s & 0xF0) >> 4;
799         const unsigned low_nibble =  (*s & 0x0F);
800
801         if (format) {
802             *d++ = ' ';
803         }
804         else {
805             *d++ = '\\';
806             *d++ = 'x';
807         }
808
809         if (high_nibble < 10) {
810             *d++ = high_nibble + '0';
811         }
812         else {
813             *d++ = high_nibble - 10 + 'a';
814         }
815
816         if (low_nibble < 10) {
817             *d++ = low_nibble + '0';
818         }
819         else {
820             *d++ = low_nibble - 10 + 'a';
821         }
822     }
823
824     *d = '\0';
825     return output;
826 }
827
828 PERL_STATIC_INLINE char *
829 S_unexpected_non_continuation_text(pTHX_ const U8 * const s,
830
831                                          /* How many bytes to print */
832                                          STRLEN print_len,
833
834                                          /* Which one is the non-continuation */
835                                          const STRLEN non_cont_byte_pos,
836
837                                          /* How many bytes should there be? */
838                                          const STRLEN expect_len)
839 {
840     /* Return the malformation warning text for an unexpected continuation
841      * byte. */
842
843     const char * const where = (non_cont_byte_pos == 1)
844                                ? "immediately"
845                                : Perl_form(aTHX_ "%d bytes",
846                                                  (int) non_cont_byte_pos);
847
848     PERL_ARGS_ASSERT_UNEXPECTED_NON_CONTINUATION_TEXT;
849
850     /* We don't need to pass this parameter, but since it has already been
851      * calculated, it's likely faster to pass it; verify under DEBUGGING */
852     assert(expect_len == UTF8SKIP(s));
853
854     return Perl_form(aTHX_ "%s: %s (unexpected non-continuation byte 0x%02x,"
855                            " %s after start byte 0x%02x; need %d bytes, got %d)",
856                            malformed_text,
857                            _byte_dump_string(s, print_len, 0),
858                            *(s + non_cont_byte_pos),
859                            where,
860                            *s,
861                            (int) expect_len,
862                            (int) non_cont_byte_pos);
863 }
864
865 /*
866
867 =for apidoc utf8n_to_uvchr
868
869 THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
870 Most code should use L</utf8_to_uvchr_buf>() rather than call this directly.
871
872 Bottom level UTF-8 decode routine.
873 Returns the native code point value of the first character in the string C<s>,
874 which is assumed to be in UTF-8 (or UTF-EBCDIC) encoding, and no longer than
875 C<curlen> bytes; C<*retlen> (if C<retlen> isn't NULL) will be set to
876 the length, in bytes, of that character.
877
878 The value of C<flags> determines the behavior when C<s> does not point to a
879 well-formed UTF-8 character.  If C<flags> is 0, encountering a malformation
880 causes zero to be returned and C<*retlen> is set so that (S<C<s> + C<*retlen>>)
881 is the next possible position in C<s> that could begin a non-malformed
882 character.  Also, if UTF-8 warnings haven't been lexically disabled, a warning
883 is raised.  Some UTF-8 input sequences may contain multiple malformations.
884 This function tries to find every possible one in each call, so multiple
885 warnings can be raised for each sequence.
886
887 Various ALLOW flags can be set in C<flags> to allow (and not warn on)
888 individual types of malformations, such as the sequence being overlong (that
889 is, when there is a shorter sequence that can express the same code point;
890 overlong sequences are expressly forbidden in the UTF-8 standard due to
891 potential security issues).  Another malformation example is the first byte of
892 a character not being a legal first byte.  See F<utf8.h> for the list of such
893 flags.  Even if allowed, this function generally returns the Unicode
894 REPLACEMENT CHARACTER when it encounters a malformation.  There are flags in
895 F<utf8.h> to override this behavior for the overlong malformations, but don't
896 do that except for very specialized purposes.
897
898 The C<UTF8_CHECK_ONLY> flag overrides the behavior when a non-allowed (by other
899 flags) malformation is found.  If this flag is set, the routine assumes that
900 the caller will raise a warning, and this function will silently just set
901 C<retlen> to C<-1> (cast to C<STRLEN>) and return zero.
902
903 Note that this API requires disambiguation between successful decoding a C<NUL>
904 character, and an error return (unless the C<UTF8_CHECK_ONLY> flag is set), as
905 in both cases, 0 is returned, and, depending on the malformation, C<retlen> may
906 be set to 1.  To disambiguate, upon a zero return, see if the first byte of
907 C<s> is 0 as well.  If so, the input was a C<NUL>; if not, the input had an
908 error.  Or you can use C<L</utf8n_to_uvchr_error>>.
909
910 Certain code points are considered problematic.  These are Unicode surrogates,
911 Unicode non-characters, and code points above the Unicode maximum of 0x10FFFF.
912 By default these are considered regular code points, but certain situations
913 warrant special handling for them, which can be specified using the C<flags>
914 parameter.  If C<flags> contains C<UTF8_DISALLOW_ILLEGAL_INTERCHANGE>, all
915 three classes are treated as malformations and handled as such.  The flags
916 C<UTF8_DISALLOW_SURROGATE>, C<UTF8_DISALLOW_NONCHAR>, and
917 C<UTF8_DISALLOW_SUPER> (meaning above the legal Unicode maximum) can be set to
918 disallow these categories individually.  C<UTF8_DISALLOW_ILLEGAL_INTERCHANGE>
919 restricts the allowed inputs to the strict UTF-8 traditionally defined by
920 Unicode.  Use C<UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE> to use the strictness
921 definition given by
922 L<Unicode Corrigendum #9|http://www.unicode.org/versions/corrigendum9.html>.
923 The difference between traditional strictness and C9 strictness is that the
924 latter does not forbid non-character code points.  (They are still discouraged,
925 however.)  For more discussion see L<perlunicode/Noncharacter code points>.
926
927 The flags C<UTF8_WARN_ILLEGAL_INTERCHANGE>,
928 C<UTF8_WARN_ILLEGAL_C9_INTERCHANGE>, C<UTF8_WARN_SURROGATE>,
929 C<UTF8_WARN_NONCHAR>, and C<UTF8_WARN_SUPER> will cause warning messages to be
930 raised for their respective categories, but otherwise the code points are
931 considered valid (not malformations).  To get a category to both be treated as
932 a malformation and raise a warning, specify both the WARN and DISALLOW flags.
933 (But note that warnings are not raised if lexically disabled nor if
934 C<UTF8_CHECK_ONLY> is also specified.)
935
936 It is now deprecated to have very high code points (above C<IV_MAX> on the
937 platforms) and this function will raise a deprecation warning for these (unless
938 such warnings are turned off).  This value is typically 0x7FFF_FFFF (2**31 -1)
939 in a 32-bit word.
940
941 Code points above 0x7FFF_FFFF (2**31 - 1) were never specified in any standard,
942 so using them is more problematic than other above-Unicode code points.  Perl
943 invented an extension to UTF-8 to represent the ones above 2**36-1, so it is
944 likely that non-Perl languages will not be able to read files that contain
945 these; nor would Perl understand files
946 written by something that uses a different extension.  For these reasons, there
947 is a separate set of flags that can warn and/or disallow these extremely high
948 code points, even if other above-Unicode ones are accepted.  These are the
949 C<UTF8_WARN_ABOVE_31_BIT> and C<UTF8_DISALLOW_ABOVE_31_BIT> flags.  These
950 are entirely independent from the deprecation warning for code points above
951 C<IV_MAX>.  On 32-bit machines, it will eventually be forbidden to have any
952 code point that needs more than 31 bits to represent.  When that happens,
953 effectively the C<UTF8_DISALLOW_ABOVE_31_BIT> flag will always be set on
954 32-bit machines.  (Of course C<UTF8_DISALLOW_SUPER> will treat all
955 above-Unicode code points, including these, as malformations; and
956 C<UTF8_WARN_SUPER> warns on these.)
957
958 On EBCDIC platforms starting in Perl v5.24, the Perl extension for representing
959 extremely high code points kicks in at 0x3FFF_FFFF (2**30 -1), which is lower
960 than on ASCII.  Prior to that, code points 2**31 and higher were simply
961 unrepresentable, and a different, incompatible method was used to represent
962 code points between 2**30 and 2**31 - 1.  The flags C<UTF8_WARN_ABOVE_31_BIT>
963 and C<UTF8_DISALLOW_ABOVE_31_BIT> have the same function as on ASCII
964 platforms, warning and disallowing 2**31 and higher.
965
966 All other code points corresponding to Unicode characters, including private
967 use and those yet to be assigned, are never considered malformed and never
968 warn.
969
970 =cut
971
972 Also implemented as a macro in utf8.h
973 */
974
975 UV
976 Perl_utf8n_to_uvchr(pTHX_ const U8 *s,
977                           STRLEN curlen,
978                           STRLEN *retlen,
979                           const U32 flags)
980 {
981     PERL_ARGS_ASSERT_UTF8N_TO_UVCHR;
982
983     return utf8n_to_uvchr_error(s, curlen, retlen, flags, NULL);
984 }
985
986 /*
987
988 =for apidoc utf8n_to_uvchr_error
989
990 THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
991 Most code should use L</utf8_to_uvchr_buf>() rather than call this directly.
992
993 This function is for code that needs to know what the precise malformation(s)
994 are when an error is found.
995
996 It is like C<L</utf8n_to_uvchr>> but it takes an extra parameter placed after
997 all the others, C<errors>.  If this parameter is 0, this function behaves
998 identically to C<L</utf8n_to_uvchr>>.  Otherwise, C<errors> should be a pointer
999 to a C<U32> variable, which this function sets to indicate any errors found.
1000 Upon return, if C<*errors> is 0, there were no errors found.  Otherwise,
1001 C<*errors> is the bit-wise C<OR> of the bits described in the list below.  Some
1002 of these bits will be set if a malformation is found, even if the input
1003 C<flags> parameter indicates that the given malformation is allowed; those
1004 exceptions are noted:
1005
1006 =over 4
1007
1008 =item C<UTF8_GOT_ABOVE_31_BIT>
1009
1010 The code point represented by the input UTF-8 sequence occupies more than 31
1011 bits.
1012 This bit is set only if the input C<flags> parameter contains either the
1013 C<UTF8_DISALLOW_ABOVE_31_BIT> or the C<UTF8_WARN_ABOVE_31_BIT> flags.
1014
1015 =item C<UTF8_GOT_CONTINUATION>
1016
1017 The input sequence was malformed in that the first byte was a a UTF-8
1018 continuation byte.
1019
1020 =item C<UTF8_GOT_EMPTY>
1021
1022 The input C<curlen> parameter was 0.
1023
1024 =item C<UTF8_GOT_LONG>
1025
1026 The input sequence was malformed in that there is some other sequence that
1027 evaluates to the same code point, but that sequence is shorter than this one.
1028
1029 Until Unicode 3.1, it was legal for programs to accept this malformation, but
1030 it was discovered that this created security issues.
1031
1032 =item C<UTF8_GOT_NONCHAR>
1033
1034 The code point represented by the input UTF-8 sequence is for a Unicode
1035 non-character code point.
1036 This bit is set only if the input C<flags> parameter contains either the
1037 C<UTF8_DISALLOW_NONCHAR> or the C<UTF8_WARN_NONCHAR> flags.
1038
1039 =item C<UTF8_GOT_NON_CONTINUATION>
1040
1041 The input sequence was malformed in that a non-continuation type byte was found
1042 in a position where only a continuation type one should be.
1043
1044 =item C<UTF8_GOT_OVERFLOW>
1045
1046 The input sequence was malformed in that it is for a code point that is not
1047 representable in the number of bits available in a UV on the current platform.
1048
1049 =item C<UTF8_GOT_SHORT>
1050
1051 The input sequence was malformed in that C<curlen> is smaller than required for
1052 a complete sequence.  In other words, the input is for a partial character
1053 sequence.
1054
1055 =item C<UTF8_GOT_SUPER>
1056
1057 The input sequence was malformed in that it is for a non-Unicode code point;
1058 that is, one above the legal Unicode maximum.
1059 This bit is set only if the input C<flags> parameter contains either the
1060 C<UTF8_DISALLOW_SUPER> or the C<UTF8_WARN_SUPER> flags.
1061
1062 =item C<UTF8_GOT_SURROGATE>
1063
1064 The input sequence was malformed in that it is for a -Unicode UTF-16 surrogate
1065 code point.
1066 This bit is set only if the input C<flags> parameter contains either the
1067 C<UTF8_DISALLOW_SURROGATE> or the C<UTF8_WARN_SURROGATE> flags.
1068
1069 =back
1070
1071 To do your own error handling, call this function with the C<UTF8_CHECK_ONLY>
1072 flag to suppress any warnings, and then examine the C<*errors> return.
1073
1074 =cut
1075 */
1076
1077 UV
1078 Perl_utf8n_to_uvchr_error(pTHX_ const U8 *s,
1079                                 STRLEN curlen,
1080                                 STRLEN *retlen,
1081                                 const U32 flags,
1082                                 U32 * errors)
1083 {
1084     const U8 * const s0 = s;
1085     U8 * send = NULL;           /* (initialized to silence compilers' wrong
1086                                    warning) */
1087     U32 possible_problems = 0;  /* A bit is set here for each potential problem
1088                                    found as we go along */
1089     UV uv = *s;
1090     STRLEN expectlen   = 0;     /* How long should this sequence be?
1091                                    (initialized to silence compilers' wrong
1092                                    warning) */
1093     STRLEN avail_len   = 0;     /* When input is too short, gives what that is */
1094     U32 discard_errors = 0;     /* Used to save branches when 'errors' is NULL;
1095                                    this gets set and discarded */
1096
1097     /* The below are used only if there is both an overlong malformation and a
1098      * too short one.  Otherwise the first two are set to 's0' and 'send', and
1099      * the third not used at all */
1100     U8 * adjusted_s0 = (U8 *) s0;
1101     U8 * adjusted_send = NULL;  /* (Initialized to silence compilers' wrong
1102                                    warning) */
1103     U8 temp_char_buf[UTF8_MAXBYTES + 1]; /* Used to avoid a Newx in this
1104                                             routine; see [perl #130921] */
1105     UV uv_so_far = 0;   /* (Initialized to silence compilers' wrong warning) */
1106
1107     PERL_ARGS_ASSERT_UTF8N_TO_UVCHR_ERROR;
1108
1109     if (errors) {
1110         *errors = 0;
1111     }
1112     else {
1113         errors = &discard_errors;
1114     }
1115
1116     /* The order of malformation tests here is important.  We should consume as
1117      * few bytes as possible in order to not skip any valid character.  This is
1118      * required by the Unicode Standard (section 3.9 of Unicode 6.0); see also
1119      * http://unicode.org/reports/tr36 for more discussion as to why.  For
1120      * example, once we've done a UTF8SKIP, we can tell the expected number of
1121      * bytes, and could fail right off the bat if the input parameters indicate
1122      * that there are too few available.  But it could be that just that first
1123      * byte is garbled, and the intended character occupies fewer bytes.  If we
1124      * blindly assumed that the first byte is correct, and skipped based on
1125      * that number, we could skip over a valid input character.  So instead, we
1126      * always examine the sequence byte-by-byte.
1127      *
1128      * We also should not consume too few bytes, otherwise someone could inject
1129      * things.  For example, an input could be deliberately designed to
1130      * overflow, and if this code bailed out immediately upon discovering that,
1131      * returning to the caller C<*retlen> pointing to the very next byte (one
1132      * which is actually part of of the overflowing sequence), that could look
1133      * legitimate to the caller, which could discard the initial partial
1134      * sequence and process the rest, inappropriately.
1135      *
1136      * Some possible input sequences are malformed in more than one way.  This
1137      * function goes to lengths to try to find all of them.  This is necessary
1138      * for correctness, as the inputs may allow one malformation but not
1139      * another, and if we abandon searching for others after finding the
1140      * allowed one, we could allow in something that shouldn't have been.
1141      */
1142
1143     if (UNLIKELY(curlen == 0)) {
1144         possible_problems |= UTF8_GOT_EMPTY;
1145         curlen = 0;
1146         uv = UNICODE_REPLACEMENT;
1147         goto ready_to_handle_errors;
1148     }
1149
1150     expectlen = UTF8SKIP(s);
1151
1152     /* A well-formed UTF-8 character, as the vast majority of calls to this
1153      * function will be for, has this expected length.  For efficiency, set
1154      * things up here to return it.  It will be overriden only in those rare
1155      * cases where a malformation is found */
1156     if (retlen) {
1157         *retlen = expectlen;
1158     }
1159
1160     /* An invariant is trivially well-formed */
1161     if (UTF8_IS_INVARIANT(uv)) {
1162         return uv;
1163     }
1164
1165     /* A continuation character can't start a valid sequence */
1166     if (UNLIKELY(UTF8_IS_CONTINUATION(uv))) {
1167         possible_problems |= UTF8_GOT_CONTINUATION;
1168         curlen = 1;
1169         uv = UNICODE_REPLACEMENT;
1170         goto ready_to_handle_errors;
1171     }
1172
1173     /* Here is not a continuation byte, nor an invariant.  The only thing left
1174      * is a start byte (possibly for an overlong).  (We can't use UTF8_IS_START
1175      * because it excludes start bytes like \xC0 that always lead to
1176      * overlongs.) */
1177
1178     /* Convert to I8 on EBCDIC (no-op on ASCII), then remove the leading bits
1179      * that indicate the number of bytes in the character's whole UTF-8
1180      * sequence, leaving just the bits that are part of the value.  */
1181     uv = NATIVE_UTF8_TO_I8(uv) & UTF_START_MASK(expectlen);
1182
1183     /* Setup the loop end point, making sure to not look past the end of the
1184      * input string, and flag it as too short if the size isn't big enough. */
1185     send = (U8*) s0;
1186     if (UNLIKELY(curlen < expectlen)) {
1187         possible_problems |= UTF8_GOT_SHORT;
1188         avail_len = curlen;
1189         send += curlen;
1190     }
1191     else {
1192         send += expectlen;
1193     }
1194     adjusted_send = send;
1195
1196     /* Now, loop through the remaining bytes in the character's sequence,
1197      * accumulating each into the working value as we go. */
1198     for (s = s0 + 1; s < send; s++) {
1199         if (LIKELY(UTF8_IS_CONTINUATION(*s))) {
1200             uv = UTF8_ACCUMULATE(uv, *s);
1201             continue;
1202         }
1203
1204         /* Here, found a non-continuation before processing all expected bytes.
1205          * This byte indicates the beginning of a new character, so quit, even
1206          * if allowing this malformation. */
1207         possible_problems |= UTF8_GOT_NON_CONTINUATION;
1208         break;
1209     } /* End of loop through the character's bytes */
1210
1211     /* Save how many bytes were actually in the character */
1212     curlen = s - s0;
1213
1214     /* Note that there are two types of too-short malformation.  One is when
1215      * there is actual wrong data before the normal termination of the
1216      * sequence.  The other is that the sequence wasn't complete before the end
1217      * of the data we are allowed to look at, based on the input 'curlen'.
1218      * This means that we were passed data for a partial character, but it is
1219      * valid as far as we saw.  The other is definitely invalid.  This
1220      * distinction could be important to a caller, so the two types are kept
1221      * separate.
1222      *
1223      * A convenience macro that matches either of the too-short conditions.  */
1224 #   define UTF8_GOT_TOO_SHORT (UTF8_GOT_SHORT|UTF8_GOT_NON_CONTINUATION)
1225
1226     if (UNLIKELY(possible_problems & UTF8_GOT_TOO_SHORT)) {
1227         uv_so_far = uv;
1228         uv = UNICODE_REPLACEMENT;
1229     }
1230
1231     /* Check for overflow */
1232     if (UNLIKELY(does_utf8_overflow(s0, send))) {
1233         possible_problems |= UTF8_GOT_OVERFLOW;
1234         uv = UNICODE_REPLACEMENT;
1235     }
1236
1237     /* Check for overlong.  If no problems so far, 'uv' is the correct code
1238      * point value.  Simply see if it is expressible in fewer bytes.  Otherwise
1239      * we must look at the UTF-8 byte sequence itself to see if it is for an
1240      * overlong */
1241     if (     (   LIKELY(! possible_problems)
1242               && UNLIKELY(expectlen > (STRLEN) OFFUNISKIP(uv)))
1243         || (   UNLIKELY(  possible_problems)
1244             && (   UNLIKELY(! UTF8_IS_START(*s0))
1245                 || (   curlen > 1
1246                     && UNLIKELY(is_utf8_overlong_given_start_byte_ok(s0,
1247                                                                 send - s0))))))
1248     {
1249         possible_problems |= UTF8_GOT_LONG;
1250
1251         if (UNLIKELY(possible_problems & UTF8_GOT_TOO_SHORT)) {
1252             UV min_uv = uv_so_far;
1253             STRLEN i;
1254
1255             /* Here, the input is both overlong and is missing some trailing
1256              * bytes.  There is no single code point it could be for, but there
1257              * may be enough information present to determine if what we have
1258              * so far is for an unallowed code point, such as for a surrogate.
1259              * The code below has the intelligence to determine this, but just
1260              * for non-overlong UTF-8 sequences.  What we do here is calculate
1261              * the smallest code point the input could represent if there were
1262              * no too short malformation.  Then we compute and save the UTF-8
1263              * for that, which is what the code below looks at instead of the
1264              * raw input.  It turns out that the smallest such code point is
1265              * all we need. */
1266             for (i = curlen; i < expectlen; i++) {
1267                 min_uv = UTF8_ACCUMULATE(min_uv,
1268                                      I8_TO_NATIVE_UTF8(UTF_CONTINUATION_MARK));
1269             }
1270
1271             adjusted_s0 = temp_char_buf;
1272             adjusted_send = uvoffuni_to_utf8_flags(adjusted_s0, min_uv, 0);
1273         }
1274     }
1275
1276     /* Now check that the input isn't for a problematic code point not allowed
1277      * by the input parameters. */
1278                                               /* isn't problematic if < this */
1279     if (   (   (   LIKELY(! possible_problems) && uv >= UNICODE_SURROGATE_FIRST)
1280             || (   UNLIKELY(possible_problems)
1281
1282                           /* if overflow, we know without looking further
1283                            * precisely which of the problematic types it is,
1284                            * and we deal with those in the overflow handling
1285                            * code */
1286                 && LIKELY(! (possible_problems & UTF8_GOT_OVERFLOW))
1287                 && isUTF8_POSSIBLY_PROBLEMATIC(*adjusted_s0)))
1288         && ((flags & ( UTF8_DISALLOW_NONCHAR
1289                       |UTF8_DISALLOW_SURROGATE
1290                       |UTF8_DISALLOW_SUPER
1291                       |UTF8_DISALLOW_ABOVE_31_BIT
1292                       |UTF8_WARN_NONCHAR
1293                       |UTF8_WARN_SURROGATE
1294                       |UTF8_WARN_SUPER
1295                       |UTF8_WARN_ABOVE_31_BIT))
1296                    /* In case of a malformation, 'uv' is not valid, and has
1297                     * been changed to something in the Unicode range.
1298                     * Currently we don't output a deprecation message if there
1299                     * is already a malformation, so we don't have to special
1300                     * case the test immediately below */
1301             || (   UNLIKELY(uv > MAX_NON_DEPRECATED_CP)
1302                 && ckWARN_d(WARN_DEPRECATED))))
1303     {
1304         /* If there were no malformations, or the only malformation is an
1305          * overlong, 'uv' is valid */
1306         if (LIKELY(! (possible_problems & ~UTF8_GOT_LONG))) {
1307             if (UNLIKELY(UNICODE_IS_SURROGATE(uv))) {
1308                 possible_problems |= UTF8_GOT_SURROGATE;
1309             }
1310             else if (UNLIKELY(uv > PERL_UNICODE_MAX)) {
1311                 possible_problems |= UTF8_GOT_SUPER;
1312             }
1313             else if (UNLIKELY(UNICODE_IS_NONCHAR(uv))) {
1314                 possible_problems |= UTF8_GOT_NONCHAR;
1315             }
1316         }
1317         else {  /* Otherwise, need to look at the source UTF-8, possibly
1318                    adjusted to be non-overlong */
1319
1320             if (UNLIKELY(NATIVE_UTF8_TO_I8(*adjusted_s0)
1321                                 >= FIRST_START_BYTE_THAT_IS_DEFINITELY_SUPER))
1322             {
1323                 possible_problems |= UTF8_GOT_SUPER;
1324             }
1325             else if (curlen > 1) {
1326                 if (UNLIKELY(IS_UTF8_2_BYTE_SUPER(
1327                                       NATIVE_UTF8_TO_I8(*adjusted_s0),
1328                                       NATIVE_UTF8_TO_I8(*(adjusted_s0 + 1)))))
1329                 {
1330                     possible_problems |= UTF8_GOT_SUPER;
1331                 }
1332                 else if (UNLIKELY(IS_UTF8_2_BYTE_SURROGATE(
1333                                       NATIVE_UTF8_TO_I8(*adjusted_s0),
1334                                       NATIVE_UTF8_TO_I8(*(adjusted_s0 + 1)))))
1335                 {
1336                     possible_problems |= UTF8_GOT_SURROGATE;
1337                 }
1338             }
1339
1340             /* We need a complete well-formed UTF-8 character to discern
1341              * non-characters, so can't look for them here */
1342         }
1343     }
1344
1345   ready_to_handle_errors:
1346
1347     /* At this point:
1348      * curlen               contains the number of bytes in the sequence that
1349      *                      this call should advance the input by.
1350      * avail_len            gives the available number of bytes passed in, but
1351      *                      only if this is less than the expected number of
1352      *                      bytes, based on the code point's start byte.
1353      * possible_problems'   is 0 if there weren't any problems; otherwise a bit
1354      *                      is set in it for each potential problem found.
1355      * uv                   contains the code point the input sequence
1356      *                      represents; or if there is a problem that prevents
1357      *                      a well-defined value from being computed, it is
1358      *                      some subsitute value, typically the REPLACEMENT
1359      *                      CHARACTER.
1360      * s0                   points to the first byte of the character
1361      * send                 points to just after where that (potentially
1362      *                      partial) character ends
1363      * adjusted_s0          normally is the same as s0, but in case of an
1364      *                      overlong for which the UTF-8 matters below, it is
1365      *                      the first byte of the shortest form representation
1366      *                      of the input.
1367      * adjusted_send        normally is the same as 'send', but if adjusted_s0
1368      *                      is set to something other than s0, this points one
1369      *                      beyond its end
1370      */
1371
1372     if (UNLIKELY(possible_problems)) {
1373         bool disallowed = FALSE;
1374         const U32 orig_problems = possible_problems;
1375
1376         while (possible_problems) { /* Handle each possible problem */
1377             UV pack_warn = 0;
1378             char * message = NULL;
1379
1380             /* Each 'if' clause handles one problem.  They are ordered so that
1381              * the first ones' messages will be displayed before the later
1382              * ones; this is kinda in decreasing severity order */
1383             if (possible_problems & UTF8_GOT_OVERFLOW) {
1384
1385                 /* Overflow means also got a super and above 31 bits, but we
1386                  * handle all three cases here */
1387                 possible_problems
1388                   &= ~(UTF8_GOT_OVERFLOW|UTF8_GOT_SUPER|UTF8_GOT_ABOVE_31_BIT);
1389                 *errors |= UTF8_GOT_OVERFLOW;
1390
1391                 /* But the API says we flag all errors found */
1392                 if (flags & (UTF8_WARN_SUPER|UTF8_DISALLOW_SUPER)) {
1393                     *errors |= UTF8_GOT_SUPER;
1394                 }
1395                 if (flags
1396                         & (UTF8_WARN_ABOVE_31_BIT|UTF8_DISALLOW_ABOVE_31_BIT))
1397                 {
1398                     *errors |= UTF8_GOT_ABOVE_31_BIT;
1399                 }
1400
1401                 /* Disallow if any of the three categories say to */
1402                 if ( ! (flags & UTF8_ALLOW_OVERFLOW)
1403                     || (flags & ( UTF8_DISALLOW_SUPER
1404                                  |UTF8_DISALLOW_ABOVE_31_BIT)))
1405                 {
1406                     disallowed = TRUE;
1407                 }
1408
1409
1410                 /* Likewise, warn if any say to, plus if deprecation warnings
1411                  * are on, because this code point is above IV_MAX */
1412                 if (  ckWARN_d(WARN_DEPRECATED)
1413                     || ! (flags & UTF8_ALLOW_OVERFLOW)
1414                     ||   (flags & (UTF8_WARN_SUPER|UTF8_WARN_ABOVE_31_BIT)))
1415                 {
1416
1417                     /* The warnings code explicitly says it doesn't handle the
1418                      * case of packWARN2 and two categories which have
1419                      * parent-child relationship.  Even if it works now to
1420                      * raise the warning if either is enabled, it wouldn't
1421                      * necessarily do so in the future.  We output (only) the
1422                      * most dire warning*/
1423                     if (! (flags & UTF8_CHECK_ONLY)) {
1424                         if (ckWARN_d(WARN_UTF8)) {
1425                             pack_warn = packWARN(WARN_UTF8);
1426                         }
1427                         else if (ckWARN_d(WARN_NON_UNICODE)) {
1428                             pack_warn = packWARN(WARN_NON_UNICODE);
1429                         }
1430                         if (pack_warn) {
1431                             message = Perl_form(aTHX_ "%s: %s (overflows)",
1432                                             malformed_text,
1433                                             _byte_dump_string(s0, curlen, 0));
1434                         }
1435                     }
1436                 }
1437             }
1438             else if (possible_problems & UTF8_GOT_EMPTY) {
1439                 possible_problems &= ~UTF8_GOT_EMPTY;
1440                 *errors |= UTF8_GOT_EMPTY;
1441
1442                 if (! (flags & UTF8_ALLOW_EMPTY)) {
1443
1444                     /* This so-called malformation is now treated as a bug in
1445                      * the caller.  If you have nothing to decode, skip calling
1446                      * this function */
1447                     assert(0);
1448
1449                     disallowed = TRUE;
1450                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1451                         pack_warn = packWARN(WARN_UTF8);
1452                         message = Perl_form(aTHX_ "%s (empty string)",
1453                                                    malformed_text);
1454                     }
1455                 }
1456             }
1457             else if (possible_problems & UTF8_GOT_CONTINUATION) {
1458                 possible_problems &= ~UTF8_GOT_CONTINUATION;
1459                 *errors |= UTF8_GOT_CONTINUATION;
1460
1461                 if (! (flags & UTF8_ALLOW_CONTINUATION)) {
1462                     disallowed = TRUE;
1463                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1464                         pack_warn = packWARN(WARN_UTF8);
1465                         message = Perl_form(aTHX_
1466                                 "%s: %s (unexpected continuation byte 0x%02x,"
1467                                 " with no preceding start byte)",
1468                                 malformed_text,
1469                                 _byte_dump_string(s0, 1, 0), *s0);
1470                     }
1471                 }
1472             }
1473             else if (possible_problems & UTF8_GOT_SHORT) {
1474                 possible_problems &= ~UTF8_GOT_SHORT;
1475                 *errors |= UTF8_GOT_SHORT;
1476
1477                 if (! (flags & UTF8_ALLOW_SHORT)) {
1478                     disallowed = TRUE;
1479                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1480                         pack_warn = packWARN(WARN_UTF8);
1481                         message = Perl_form(aTHX_
1482                                 "%s: %s (too short; %d byte%s available, need %d)",
1483                                 malformed_text,
1484                                 _byte_dump_string(s0, send - s0, 0),
1485                                 (int)avail_len,
1486                                 avail_len == 1 ? "" : "s",
1487                                 (int)expectlen);
1488                     }
1489                 }
1490
1491             }
1492             else if (possible_problems & UTF8_GOT_NON_CONTINUATION) {
1493                 possible_problems &= ~UTF8_GOT_NON_CONTINUATION;
1494                 *errors |= UTF8_GOT_NON_CONTINUATION;
1495
1496                 if (! (flags & UTF8_ALLOW_NON_CONTINUATION)) {
1497                     disallowed = TRUE;
1498                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1499
1500                         /* If we don't know for sure that the input length is
1501                          * valid, avoid as much as possible reading past the
1502                          * end of the buffer */
1503                         int printlen = (flags & _UTF8_NO_CONFIDENCE_IN_CURLEN)
1504                                        ? s - s0
1505                                        : send - s0;
1506                         pack_warn = packWARN(WARN_UTF8);
1507                         message = Perl_form(aTHX_ "%s",
1508                             unexpected_non_continuation_text(s0,
1509                                                             printlen,
1510                                                             s - s0,
1511                                                             (int) expectlen));
1512                     }
1513                 }
1514             }
1515             else if (possible_problems & UTF8_GOT_LONG) {
1516                 possible_problems &= ~UTF8_GOT_LONG;
1517                 *errors |= UTF8_GOT_LONG;
1518
1519                 if (flags & UTF8_ALLOW_LONG) {
1520
1521                     /* We don't allow the actual overlong value, unless the
1522                      * special extra bit is also set */
1523                     if (! (flags & (   UTF8_ALLOW_LONG_AND_ITS_VALUE
1524                                     & ~UTF8_ALLOW_LONG)))
1525                     {
1526                         uv = UNICODE_REPLACEMENT;
1527                     }
1528                 }
1529                 else {
1530                     disallowed = TRUE;
1531
1532                     if (ckWARN_d(WARN_UTF8) && ! (flags & UTF8_CHECK_ONLY)) {
1533                         pack_warn = packWARN(WARN_UTF8);
1534
1535                         /* These error types cause 'uv' to be something that
1536                          * isn't what was intended, so can't use it in the
1537                          * message.  The other error types either can't
1538                          * generate an overlong, or else the 'uv' is valid */
1539                         if (orig_problems &
1540                                         (UTF8_GOT_TOO_SHORT|UTF8_GOT_OVERFLOW))
1541                         {
1542                             message = Perl_form(aTHX_
1543                                     "%s: %s (any UTF-8 sequence that starts"
1544                                     " with \"%s\" is overlong which can and"
1545                                     " should be represented with a"
1546                                     " different, shorter sequence)",
1547                                     malformed_text,
1548                                     _byte_dump_string(s0, send - s0, 0),
1549                                     _byte_dump_string(s0, curlen, 0));
1550                         }
1551                         else {
1552                             U8 tmpbuf[UTF8_MAXBYTES+1];
1553                             const U8 * const e = uvoffuni_to_utf8_flags(tmpbuf,
1554                                                                         uv, 0);
1555                             message = Perl_form(aTHX_
1556                                 "%s: %s (overlong; instead use %s to represent"
1557                                 " U+%0*" UVXf ")",
1558                                 malformed_text,
1559                                 _byte_dump_string(s0, curlen, 0),
1560                                 _byte_dump_string(tmpbuf, e - tmpbuf, 0),
1561                                 ((uv < 256) ? 2 : 4), /* Field width of 2 for
1562                                                          small code points */
1563                                 uv);
1564                         }
1565                     }
1566                 }
1567             }
1568             else if (possible_problems & UTF8_GOT_SURROGATE) {
1569                 possible_problems &= ~UTF8_GOT_SURROGATE;
1570
1571                 if (flags & UTF8_WARN_SURROGATE) {
1572                     *errors |= UTF8_GOT_SURROGATE;
1573
1574                     if (   ! (flags & UTF8_CHECK_ONLY)
1575                         && ckWARN_d(WARN_SURROGATE))
1576                     {
1577                         pack_warn = packWARN(WARN_SURROGATE);
1578
1579                         /* These are the only errors that can occur with a
1580                         * surrogate when the 'uv' isn't valid */
1581                         if (orig_problems & UTF8_GOT_TOO_SHORT) {
1582                             message = Perl_form(aTHX_
1583                                     "UTF-16 surrogate (any UTF-8 sequence that"
1584                                     " starts with \"%s\" is for a surrogate)",
1585                                     _byte_dump_string(s0, curlen, 0));
1586                         }
1587                         else {
1588                             message = Perl_form(aTHX_
1589                                             "UTF-16 surrogate U+%04" UVXf, uv);
1590                         }
1591                     }
1592                 }
1593
1594                 if (flags & UTF8_DISALLOW_SURROGATE) {
1595                     disallowed = TRUE;
1596                     *errors |= UTF8_GOT_SURROGATE;
1597                 }
1598             }
1599             else if (possible_problems & UTF8_GOT_SUPER) {
1600                 possible_problems &= ~UTF8_GOT_SUPER;
1601
1602                 if (flags & UTF8_WARN_SUPER) {
1603                     *errors |= UTF8_GOT_SUPER;
1604
1605                     if (   ! (flags & UTF8_CHECK_ONLY)
1606                         && ckWARN_d(WARN_NON_UNICODE))
1607                     {
1608                         pack_warn = packWARN(WARN_NON_UNICODE);
1609
1610                         if (orig_problems & UTF8_GOT_TOO_SHORT) {
1611                             message = Perl_form(aTHX_
1612                                     "Any UTF-8 sequence that starts with"
1613                                     " \"%s\" is for a non-Unicode code point,"
1614                                     " may not be portable",
1615                                     _byte_dump_string(s0, curlen, 0));
1616                         }
1617                         else {
1618                             message = Perl_form(aTHX_
1619                                                 "Code point 0x%04" UVXf " is not"
1620                                                 " Unicode, may not be portable",
1621                                                 uv);
1622                         }
1623                     }
1624                 }
1625
1626                 /* The maximum code point ever specified by a standard was
1627                  * 2**31 - 1.  Anything larger than that is a Perl extension
1628                  * that very well may not be understood by other applications
1629                  * (including earlier perl versions on EBCDIC platforms).  We
1630                  * test for these after the regular SUPER ones, and before
1631                  * possibly bailing out, so that the slightly more dire warning
1632                  * will override the regular one. */
1633                 if (   (flags & (UTF8_WARN_ABOVE_31_BIT
1634                                 |UTF8_WARN_SUPER
1635                                 |UTF8_DISALLOW_ABOVE_31_BIT))
1636                     && (   (   UNLIKELY(orig_problems & UTF8_GOT_TOO_SHORT)
1637                             && UNLIKELY(is_utf8_cp_above_31_bits(
1638                                                                 adjusted_s0,
1639                                                                 adjusted_send)))
1640                         || (   LIKELY(! (orig_problems & UTF8_GOT_TOO_SHORT))
1641                             && UNLIKELY(UNICODE_IS_ABOVE_31_BIT(uv)))))
1642                 {
1643                     if (  ! (flags & UTF8_CHECK_ONLY)
1644                         &&  (flags & (UTF8_WARN_ABOVE_31_BIT|UTF8_WARN_SUPER))
1645                         &&  ckWARN_d(WARN_UTF8))
1646                     {
1647                         pack_warn = packWARN(WARN_UTF8);
1648
1649                         if (orig_problems & UTF8_GOT_TOO_SHORT) {
1650                             message = Perl_form(aTHX_
1651                                         "Any UTF-8 sequence that starts with"
1652                                         " \"%s\" is for a non-Unicode code"
1653                                         " point, and is not portable",
1654                                         _byte_dump_string(s0, curlen, 0));
1655                         }
1656                         else {
1657                             message = Perl_form(aTHX_
1658                                         "Code point 0x%" UVXf " is not Unicode,"
1659                                         " and not portable",
1660                                          uv);
1661                         }
1662                     }
1663
1664                     if (flags & ( UTF8_WARN_ABOVE_31_BIT
1665                                  |UTF8_DISALLOW_ABOVE_31_BIT))
1666                     {
1667                         *errors |= UTF8_GOT_ABOVE_31_BIT;
1668
1669                         if (flags & UTF8_DISALLOW_ABOVE_31_BIT) {
1670                             disallowed = TRUE;
1671                         }
1672                     }
1673                 }
1674
1675                 if (flags & UTF8_DISALLOW_SUPER) {
1676                     *errors |= UTF8_GOT_SUPER;
1677                     disallowed = TRUE;
1678                 }
1679
1680                 /* The deprecated warning overrides any non-deprecated one.  If
1681                  * there are other problems, a deprecation message is not
1682                  * really helpful, so don't bother to raise it in that case.
1683                  * This also keeps the code from having to handle the case
1684                  * where 'uv' is not valid. */
1685                 if (   ! (orig_problems
1686                                     & (UTF8_GOT_TOO_SHORT|UTF8_GOT_OVERFLOW))
1687                     && UNLIKELY(uv > MAX_NON_DEPRECATED_CP)
1688                     && ckWARN_d(WARN_DEPRECATED))
1689                 {
1690                     message = Perl_form(aTHX_ cp_above_legal_max,
1691                                               uv, MAX_NON_DEPRECATED_CP);
1692                     pack_warn = packWARN(WARN_DEPRECATED);
1693                 }
1694             }
1695             else if (possible_problems & UTF8_GOT_NONCHAR) {
1696                 possible_problems &= ~UTF8_GOT_NONCHAR;
1697
1698                 if (flags & UTF8_WARN_NONCHAR) {
1699                     *errors |= UTF8_GOT_NONCHAR;
1700
1701                     if (  ! (flags & UTF8_CHECK_ONLY)
1702                         && ckWARN_d(WARN_NONCHAR))
1703                     {
1704                         /* The code above should have guaranteed that we don't
1705                          * get here with errors other than overlong */
1706                         assert (! (orig_problems
1707                                         & ~(UTF8_GOT_LONG|UTF8_GOT_NONCHAR)));
1708
1709                         pack_warn = packWARN(WARN_NONCHAR);
1710                         message = Perl_form(aTHX_ "Unicode non-character"
1711                                                 " U+%04" UVXf " is not recommended"
1712                                                 " for open interchange", uv);
1713                     }
1714                 }
1715
1716                 if (flags & UTF8_DISALLOW_NONCHAR) {
1717                     disallowed = TRUE;
1718                     *errors |= UTF8_GOT_NONCHAR;
1719                 }
1720             } /* End of looking through the possible flags */
1721
1722             /* Display the message (if any) for the problem being handled in
1723              * this iteration of the loop */
1724             if (message) {
1725                 if (PL_op)
1726                     Perl_warner(aTHX_ pack_warn, "%s in %s", message,
1727                                                  OP_DESC(PL_op));
1728                 else
1729                     Perl_warner(aTHX_ pack_warn, "%s", message);
1730             }
1731         }   /* End of 'while (possible_problems)' */
1732
1733         /* Since there was a possible problem, the returned length may need to
1734          * be changed from the one stored at the beginning of this function.
1735          * Instead of trying to figure out if that's needed, just do it. */
1736         if (retlen) {
1737             *retlen = curlen;
1738         }
1739
1740         if (disallowed) {
1741             if (flags & UTF8_CHECK_ONLY && retlen) {
1742                 *retlen = ((STRLEN) -1);
1743             }
1744             return 0;
1745         }
1746     }
1747
1748     return UNI_TO_NATIVE(uv);
1749 }
1750
1751 /*
1752 =for apidoc utf8_to_uvchr_buf
1753
1754 Returns the native code point of the first character in the string C<s> which
1755 is assumed to be in UTF-8 encoding; C<send> points to 1 beyond the end of C<s>.
1756 C<*retlen> will be set to the length, in bytes, of that character.
1757
1758 If C<s> does not point to a well-formed UTF-8 character and UTF8 warnings are
1759 enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
1760 C<NULL>) to -1.  If those warnings are off, the computed value, if well-defined
1761 (or the Unicode REPLACEMENT CHARACTER if not), is silently returned, and
1762 C<*retlen> is set (if C<retlen> isn't C<NULL>) so that (S<C<s> + C<*retlen>>) is
1763 the next possible position in C<s> that could begin a non-malformed character.
1764 See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is
1765 returned.
1766
1767 Code points above the platform's C<IV_MAX> will raise a deprecation warning,
1768 unless those are turned off.
1769
1770 =cut
1771
1772 Also implemented as a macro in utf8.h
1773
1774 */
1775
1776
1777 UV
1778 Perl_utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
1779 {
1780     PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF;
1781
1782     assert(s < send);
1783
1784     return utf8n_to_uvchr(s, send - s, retlen,
1785                      ckWARN_d(WARN_UTF8) ? 0 : UTF8_ALLOW_ANY);
1786 }
1787
1788 /* This is marked as deprecated
1789  *
1790 =for apidoc utf8_to_uvuni_buf
1791
1792 Only in very rare circumstances should code need to be dealing in Unicode
1793 (as opposed to native) code points.  In those few cases, use
1794 C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|/utf8_to_uvchr_buf>> instead.
1795
1796 Returns the Unicode (not-native) code point of the first character in the
1797 string C<s> which
1798 is assumed to be in UTF-8 encoding; C<send> points to 1 beyond the end of C<s>.
1799 C<retlen> will be set to the length, in bytes, of that character.
1800
1801 If C<s> does not point to a well-formed UTF-8 character and UTF8 warnings are
1802 enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
1803 NULL) to -1.  If those warnings are off, the computed value if well-defined (or
1804 the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
1805 is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
1806 next possible position in C<s> that could begin a non-malformed character.
1807 See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
1808
1809 Code points above the platform's C<IV_MAX> will raise a deprecation warning,
1810 unless those are turned off.
1811
1812 =cut
1813 */
1814
1815 UV
1816 Perl_utf8_to_uvuni_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
1817 {
1818     PERL_ARGS_ASSERT_UTF8_TO_UVUNI_BUF;
1819
1820     assert(send > s);
1821
1822     /* Call the low level routine, asking for checks */
1823     return NATIVE_TO_UNI(utf8_to_uvchr_buf(s, send, retlen));
1824 }
1825
1826 /*
1827 =for apidoc utf8_length
1828
1829 Return the length of the UTF-8 char encoded string C<s> in characters.
1830 Stops at C<e> (inclusive).  If C<e E<lt> s> or if the scan would end
1831 up past C<e>, croaks.
1832
1833 =cut
1834 */
1835
1836 STRLEN
1837 Perl_utf8_length(pTHX_ const U8 *s, const U8 *e)
1838 {
1839     STRLEN len = 0;
1840
1841     PERL_ARGS_ASSERT_UTF8_LENGTH;
1842
1843     /* Note: cannot use UTF8_IS_...() too eagerly here since e.g.
1844      * the bitops (especially ~) can create illegal UTF-8.
1845      * In other words: in Perl UTF-8 is not just for Unicode. */
1846
1847     if (e < s)
1848         goto warn_and_return;
1849     while (s < e) {
1850         s += UTF8SKIP(s);
1851         len++;
1852     }
1853
1854     if (e != s) {
1855         len--;
1856         warn_and_return:
1857         if (PL_op)
1858             Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
1859                              "%s in %s", unees, OP_DESC(PL_op));
1860         else
1861             Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "%s", unees);
1862     }
1863
1864     return len;
1865 }
1866
1867 /*
1868 =for apidoc bytes_cmp_utf8
1869
1870 Compares the sequence of characters (stored as octets) in C<b>, C<blen> with the
1871 sequence of characters (stored as UTF-8)
1872 in C<u>, C<ulen>.  Returns 0 if they are
1873 equal, -1 or -2 if the first string is less than the second string, +1 or +2
1874 if the first string is greater than the second string.
1875
1876 -1 or +1 is returned if the shorter string was identical to the start of the
1877 longer string.  -2 or +2 is returned if
1878 there was a difference between characters
1879 within the strings.
1880
1881 =cut
1882 */
1883
1884 int
1885 Perl_bytes_cmp_utf8(pTHX_ const U8 *b, STRLEN blen, const U8 *u, STRLEN ulen)
1886 {
1887     const U8 *const bend = b + blen;
1888     const U8 *const uend = u + ulen;
1889
1890     PERL_ARGS_ASSERT_BYTES_CMP_UTF8;
1891
1892     while (b < bend && u < uend) {
1893         U8 c = *u++;
1894         if (!UTF8_IS_INVARIANT(c)) {
1895             if (UTF8_IS_DOWNGRADEABLE_START(c)) {
1896                 if (u < uend) {
1897                     U8 c1 = *u++;
1898                     if (UTF8_IS_CONTINUATION(c1)) {
1899                         c = EIGHT_BIT_UTF8_TO_NATIVE(c, c1);
1900                     } else {
1901                         /* diag_listed_as: Malformed UTF-8 character%s */
1902                         Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
1903                                     "%s %s%s",
1904                                     unexpected_non_continuation_text(u - 2, 2, 1, 2),
1905                                     PL_op ? " in " : "",
1906                                     PL_op ? OP_DESC(PL_op) : "");
1907                         return -2;
1908                     }
1909                 } else {
1910                     if (PL_op)
1911                         Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
1912                                          "%s in %s", unees, OP_DESC(PL_op));
1913                     else
1914                         Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "%s", unees);
1915                     return -2; /* Really want to return undef :-)  */
1916                 }
1917             } else {
1918                 return -2;
1919             }
1920         }
1921         if (*b != c) {
1922             return *b < c ? -2 : +2;
1923         }
1924         ++b;
1925     }
1926
1927     if (b == bend && u == uend)
1928         return 0;
1929
1930     return b < bend ? +1 : -1;
1931 }
1932
1933 /*
1934 =for apidoc utf8_to_bytes
1935
1936 Converts a string C<"s"> of length C<*lenp> from UTF-8 into native byte encoding.
1937 Unlike L</bytes_to_utf8>, this over-writes the original string, and
1938 updates C<*lenp> to contain the new length.
1939 Returns zero on failure (leaving C<"s"> unchanged) setting C<*lenp> to -1.
1940
1941 Upon successful return, the number of variants in the string can be computed by
1942 having saved the value of C<*lenp> before the call, and subtracting the
1943 after-call value of C<*lenp> from it.
1944
1945 If you need a copy of the string, see L</bytes_from_utf8>.
1946
1947 =cut
1948 */
1949
1950 U8 *
1951 Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *lenp)
1952 {
1953     U8 * first_variant;
1954
1955     PERL_ARGS_ASSERT_UTF8_TO_BYTES;
1956     PERL_UNUSED_CONTEXT;
1957
1958     /* This is a no-op if no variants at all in the input */
1959     if (is_utf8_invariant_string_loc(s, *lenp, (const U8 **) &first_variant)) {
1960         return s;
1961     }
1962
1963     {
1964         U8 * const save = s;
1965         U8 * const send = s + *lenp;
1966         U8 * d;
1967
1968         /* Nothing before the first variant needs to be changed, so start the real
1969          * work there */
1970         s = first_variant;
1971         while (s < send) {
1972             if (! UTF8_IS_INVARIANT(*s)) {
1973                 if (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(s, send)) {
1974                     *lenp = ((STRLEN) -1);
1975                     return 0;
1976                 }
1977                 s++;
1978             }
1979             s++;
1980         }
1981
1982         /* Is downgradable, so do it */
1983         d = s = first_variant;
1984         while (s < send) {
1985             U8 c = *s++;
1986             if (! UVCHR_IS_INVARIANT(c)) {
1987                 /* Then it is two-byte encoded */
1988                 c = EIGHT_BIT_UTF8_TO_NATIVE(c, *s);
1989                 s++;
1990             }
1991             *d++ = c;
1992         }
1993         *d = '\0';
1994         *lenp = d - save;
1995
1996         return save;
1997     }
1998 }
1999
2000 /*
2001 =for apidoc bytes_from_utf8
2002
2003 Converts a potentially UTF-8 encoded string C<s> of length C<*lenp> into native
2004 byte encoding.  On input, the boolean C<*is_utf8p> gives whether or not C<s> is
2005 actually encoded in UTF-8.
2006
2007 Unlike L</utf8_to_bytes> but like L</bytes_to_utf8>, this is non-destructive of
2008 the input string.
2009
2010 Do nothing if C<*is_utf8p> is 0, or if there are code points in the string
2011 not expressible in native byte encoding.  In these cases, C<*is_utf8p> and
2012 C<*lenp> are unchanged, and the return value is the original C<s>.
2013
2014 Otherwise, C<*is_utf8p> is set to 0, and the return value is a pointer to a
2015 newly created string containing a downgraded copy of C<s>, and whose length is
2016 returned in C<*lenp>, updated.  The new string is C<NUL>-terminated.
2017
2018 Upon successful return, the number of variants in the string can be computed by
2019 having saved the value of C<*lenp> before the call, and subtracting the
2020 after-call value of C<*lenp> from it.
2021
2022 =cut
2023
2024 There is a macro that avoids this function call, but this is retained for
2025 anyone who calls it with the Perl_ prefix */
2026
2027 U8 *
2028 Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8p)
2029 {
2030     PERL_ARGS_ASSERT_BYTES_FROM_UTF8;
2031     PERL_UNUSED_CONTEXT;
2032
2033     return bytes_from_utf8_loc(s, lenp, is_utf8p, NULL);
2034 }
2035
2036 /*
2037 No = here because currently externally undocumented
2038 for apidoc bytes_from_utf8_loc
2039
2040 Like C<L</bytes_from_utf8>()>, but takes an extra parameter, a pointer to where
2041 to store the location of the first character in C<"s"> that cannot be
2042 converted to non-UTF8.
2043
2044 If that parameter is C<NULL>, this function behaves identically to
2045 C<bytes_from_utf8>.
2046
2047 Otherwise if C<*is_utf8p> is 0 on input, the function behaves identically to
2048 C<bytes_from_utf8>, except it also sets C<*first_non_downgradable> to C<NULL>.
2049
2050 Otherwise, the function returns a newly created C<NUL>-terminated string
2051 containing the non-UTF8 equivalent of the convertible first portion of
2052 C<"s">.  C<*lenp> is set to its length, not including the terminating C<NUL>.
2053 If the entire input string was converted, C<*is_utf8p> is set to a FALSE value,
2054 and C<*first_non_downgradable> is set to C<NULL>.
2055
2056 Otherwise, C<*first_non_downgradable> set to point to the first byte of the
2057 first character in the original string that wasn't converted.  C<*is_utf8p> is
2058 unchanged.  Note that the new string may have length 0.
2059
2060 Another way to look at it is, if C<*first_non_downgradable> is non-C<NULL> and
2061 C<*is_utf8p> is TRUE, this function starts at the beginning of C<"s"> and
2062 converts as many characters in it as possible stopping at the first one it
2063 finds that can't be converted to non-UTF-8.  C<*first_non_downgradable> is
2064 set to point to that.  The function returns the portion that could be converted
2065 in a newly created C<NUL>-terminated string, and C<*lenp> is set to its length,
2066 not including the terminating C<NUL>.  If the very first character in the
2067 original could not be converted, C<*lenp> will be 0, and the new string will
2068 contain just a single C<NUL>.  If the entire input string was converted,
2069 C<*is_utf8p> is set to FALSE and C<*first_non_downgradable> is set to C<NULL>.
2070
2071 Upon successful return, the number of variants in the converted portion of the
2072 string can be computed by having saved the value of C<*lenp> before the call,
2073 and subtracting the after-call value of C<*lenp> from it.
2074
2075 =cut
2076
2077
2078 */
2079
2080 U8 *
2081 Perl_bytes_from_utf8_loc(const U8 *s, STRLEN *lenp, bool *is_utf8p, const U8** first_unconverted)
2082 {
2083     U8 *d;
2084     const U8 *original = s;
2085     U8 *converted_start;
2086     const U8 *send = s + *lenp;
2087
2088     PERL_ARGS_ASSERT_BYTES_FROM_UTF8_LOC;
2089
2090     if (! *is_utf8p) {
2091         if (first_unconverted) {
2092             *first_unconverted = NULL;
2093         }
2094
2095         return (U8 *) original;
2096     }
2097
2098     Newx(d, (*lenp) + 1, U8);
2099
2100     converted_start = d;
2101     while (s < send) {
2102         U8 c = *s++;
2103         if (! UTF8_IS_INVARIANT(c)) {
2104
2105             /* Then it is multi-byte encoded.  If the code point is above 0xFF,
2106              * have to stop now */
2107             if (UNLIKELY (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(s - 1, send))) {
2108                 if (first_unconverted) {
2109                     *first_unconverted = s - 1;
2110                     goto finish_and_return;
2111                 }
2112                 else {
2113                     Safefree(converted_start);
2114                     return (U8 *) original;
2115                 }
2116             }
2117
2118             c = EIGHT_BIT_UTF8_TO_NATIVE(c, *s);
2119             s++;
2120         }
2121         *d++ = c;
2122     }
2123
2124     /* Here, converted the whole of the input */
2125     *is_utf8p = FALSE;
2126     if (first_unconverted) {
2127         *first_unconverted = NULL;
2128     }
2129
2130   finish_and_return:
2131         *d = '\0';
2132         *lenp = d - converted_start;
2133
2134     /* Trim unused space */
2135     Renew(converted_start, *lenp + 1, U8);
2136
2137     return converted_start;
2138 }
2139
2140 /*
2141 =for apidoc bytes_to_utf8
2142
2143 Converts a string C<s> of length C<*lenp> bytes from the native encoding into
2144 UTF-8.
2145 Returns a pointer to the newly-created string, and sets C<*lenp> to
2146 reflect the new length in bytes.
2147
2148 Upon successful return, the number of variants in the string can be computed by
2149 having saved the value of C<*lenp> before the call, and subtracting it from the
2150 after-call value of C<*lenp>.
2151
2152 A C<NUL> character will be written after the end of the string.
2153
2154 If you want to convert to UTF-8 from encodings other than
2155 the native (Latin1 or EBCDIC),
2156 see L</sv_recode_to_utf8>().
2157
2158 =cut
2159 */
2160
2161 U8*
2162 Perl_bytes_to_utf8(pTHX_ const U8 *s, STRLEN *lenp)
2163 {
2164     const U8 * const send = s + (*lenp);
2165     U8 *d;
2166     U8 *dst;
2167
2168     PERL_ARGS_ASSERT_BYTES_TO_UTF8;
2169     PERL_UNUSED_CONTEXT;
2170
2171     Newx(d, (*lenp) * 2 + 1, U8);
2172     dst = d;
2173
2174     while (s < send) {
2175         append_utf8_from_native_byte(*s, &d);
2176         s++;
2177     }
2178     *d = '\0';
2179     *lenp = d-dst;
2180     return dst;
2181 }
2182
2183 /*
2184  * Convert native (big-endian) or reversed (little-endian) UTF-16 to UTF-8.
2185  *
2186  * Destination must be pre-extended to 3/2 source.  Do not use in-place.
2187  * We optimize for native, for obvious reasons. */
2188
2189 U8*
2190 Perl_utf16_to_utf8(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
2191 {
2192     U8* pend;
2193     U8* dstart = d;
2194
2195     PERL_ARGS_ASSERT_UTF16_TO_UTF8;
2196
2197     if (bytelen & 1)
2198         Perl_croak(aTHX_ "panic: utf16_to_utf8: odd bytelen %" UVuf, (UV)bytelen);
2199
2200     pend = p + bytelen;
2201
2202     while (p < pend) {
2203         UV uv = (p[0] << 8) + p[1]; /* UTF-16BE */
2204         p += 2;
2205         if (OFFUNI_IS_INVARIANT(uv)) {
2206             *d++ = LATIN1_TO_NATIVE((U8) uv);
2207             continue;
2208         }
2209         if (uv <= MAX_UTF8_TWO_BYTE) {
2210             *d++ = UTF8_TWO_BYTE_HI(UNI_TO_NATIVE(uv));
2211             *d++ = UTF8_TWO_BYTE_LO(UNI_TO_NATIVE(uv));
2212             continue;
2213         }
2214 #define FIRST_HIGH_SURROGATE UNICODE_SURROGATE_FIRST
2215 #define LAST_HIGH_SURROGATE  0xDBFF
2216 #define FIRST_LOW_SURROGATE  0xDC00
2217 #define LAST_LOW_SURROGATE   UNICODE_SURROGATE_LAST
2218
2219         /* This assumes that most uses will be in the first Unicode plane, not
2220          * needing surrogates */
2221         if (UNLIKELY(uv >= UNICODE_SURROGATE_FIRST
2222                   && uv <= UNICODE_SURROGATE_LAST))
2223         {
2224             if (UNLIKELY(p >= pend) || UNLIKELY(uv > LAST_HIGH_SURROGATE)) {
2225                 Perl_croak(aTHX_ "Malformed UTF-16 surrogate");
2226             }
2227             else {
2228                 UV low = (p[0] << 8) + p[1];
2229                 if (   UNLIKELY(low < FIRST_LOW_SURROGATE)
2230                     || UNLIKELY(low > LAST_LOW_SURROGATE))
2231                 {
2232                     Perl_croak(aTHX_ "Malformed UTF-16 surrogate");
2233                 }
2234                 p += 2;
2235                 uv = ((uv - FIRST_HIGH_SURROGATE) << 10)
2236                                        + (low - FIRST_LOW_SURROGATE) + 0x10000;
2237             }
2238         }
2239 #ifdef EBCDIC
2240         d = uvoffuni_to_utf8_flags(d, uv, 0);
2241 #else
2242         if (uv < 0x10000) {
2243             *d++ = (U8)(( uv >> 12)         | 0xe0);
2244             *d++ = (U8)(((uv >>  6) & 0x3f) | 0x80);
2245             *d++ = (U8)(( uv        & 0x3f) | 0x80);
2246             continue;
2247         }
2248         else {
2249             *d++ = (U8)(( uv >> 18)         | 0xf0);
2250             *d++ = (U8)(((uv >> 12) & 0x3f) | 0x80);
2251             *d++ = (U8)(((uv >>  6) & 0x3f) | 0x80);
2252             *d++ = (U8)(( uv        & 0x3f) | 0x80);
2253             continue;
2254         }
2255 #endif
2256     }
2257     *newlen = d - dstart;
2258     return d;
2259 }
2260
2261 /* Note: this one is slightly destructive of the source. */
2262
2263 U8*
2264 Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
2265 {
2266     U8* s = (U8*)p;
2267     U8* const send = s + bytelen;
2268
2269     PERL_ARGS_ASSERT_UTF16_TO_UTF8_REVERSED;
2270
2271     if (bytelen & 1)
2272         Perl_croak(aTHX_ "panic: utf16_to_utf8_reversed: odd bytelen %" UVuf,
2273                    (UV)bytelen);
2274
2275     while (s < send) {
2276         const U8 tmp = s[0];
2277         s[0] = s[1];
2278         s[1] = tmp;
2279         s += 2;
2280     }
2281     return utf16_to_utf8(p, d, bytelen, newlen);
2282 }
2283
2284 bool
2285 Perl__is_uni_FOO(pTHX_ const U8 classnum, const UV c)
2286 {
2287     U8 tmpbuf[UTF8_MAXBYTES+1];
2288     uvchr_to_utf8(tmpbuf, c);
2289     return _is_utf8_FOO_with_len(classnum, tmpbuf, tmpbuf + sizeof(tmpbuf));
2290 }
2291
2292 /* Internal function so we can deprecate the external one, and call
2293    this one from other deprecated functions in this file */
2294
2295 bool
2296 Perl__is_utf8_idstart(pTHX_ const U8 *p)
2297 {
2298     PERL_ARGS_ASSERT__IS_UTF8_IDSTART;
2299
2300     if (*p == '_')
2301         return TRUE;
2302     return is_utf8_common(p, &PL_utf8_idstart, "IdStart", NULL);
2303 }
2304
2305 bool
2306 Perl__is_uni_perl_idcont(pTHX_ UV c)
2307 {
2308     U8 tmpbuf[UTF8_MAXBYTES+1];
2309     uvchr_to_utf8(tmpbuf, c);
2310     return _is_utf8_perl_idcont_with_len(tmpbuf, tmpbuf + sizeof(tmpbuf));
2311 }
2312
2313 bool
2314 Perl__is_uni_perl_idstart(pTHX_ UV c)
2315 {
2316     U8 tmpbuf[UTF8_MAXBYTES+1];
2317     uvchr_to_utf8(tmpbuf, c);
2318     return _is_utf8_perl_idstart_with_len(tmpbuf, tmpbuf + sizeof(tmpbuf));
2319 }
2320
2321 UV
2322 Perl__to_upper_title_latin1(pTHX_ const U8 c, U8* p, STRLEN *lenp, const char S_or_s)
2323 {
2324     /* We have the latin1-range values compiled into the core, so just use
2325      * those, converting the result to UTF-8.  The only difference between upper
2326      * and title case in this range is that LATIN_SMALL_LETTER_SHARP_S is
2327      * either "SS" or "Ss".  Which one to use is passed into the routine in
2328      * 'S_or_s' to avoid a test */
2329
2330     UV converted = toUPPER_LATIN1_MOD(c);
2331
2332     PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1;
2333
2334     assert(S_or_s == 'S' || S_or_s == 's');
2335
2336     if (UVCHR_IS_INVARIANT(converted)) { /* No difference between the two for
2337                                              characters in this range */
2338         *p = (U8) converted;
2339         *lenp = 1;
2340         return converted;
2341     }
2342
2343     /* toUPPER_LATIN1_MOD gives the correct results except for three outliers,
2344      * which it maps to one of them, so as to only have to have one check for
2345      * it in the main case */
2346     if (UNLIKELY(converted == LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)) {
2347         switch (c) {
2348             case LATIN_SMALL_LETTER_Y_WITH_DIAERESIS:
2349                 converted = LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS;
2350                 break;
2351             case MICRO_SIGN:
2352                 converted = GREEK_CAPITAL_LETTER_MU;
2353                 break;
2354 #if    UNICODE_MAJOR_VERSION > 2                                        \
2355    || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1           \
2356                                   && UNICODE_DOT_DOT_VERSION >= 8)
2357             case LATIN_SMALL_LETTER_SHARP_S:
2358                 *(p)++ = 'S';
2359                 *p = S_or_s;
2360                 *lenp = 2;
2361                 return 'S';
2362 #endif
2363             default:
2364                 Perl_croak(aTHX_ "panic: to_upper_title_latin1 did not expect '%c' to map to '%c'", c, LATIN_SMALL_LETTER_Y_WITH_DIAERESIS);
2365                 NOT_REACHED; /* NOTREACHED */
2366         }
2367     }
2368
2369     *(p)++ = UTF8_TWO_BYTE_HI(converted);
2370     *p = UTF8_TWO_BYTE_LO(converted);
2371     *lenp = 2;
2372
2373     return converted;
2374 }
2375
2376 /* Call the function to convert a UTF-8 encoded character to the specified case.
2377  * Note that there may be more than one character in the result.
2378  * INP is a pointer to the first byte of the input character
2379  * OUTP will be set to the first byte of the string of changed characters.  It
2380  *      needs to have space for UTF8_MAXBYTES_CASE+1 bytes
2381  * LENP will be set to the length in bytes of the string of changed characters
2382  *
2383  * The functions return the ordinal of the first character in the string of OUTP */
2384 #define CALL_UPPER_CASE(uv, s, d, lenp) _to_utf8_case(uv, s, d, lenp, &PL_utf8_toupper, "ToUc", "")
2385 #define CALL_TITLE_CASE(uv, s, d, lenp) _to_utf8_case(uv, s, d, lenp, &PL_utf8_totitle, "ToTc", "")
2386 #define CALL_LOWER_CASE(uv, s, d, lenp) _to_utf8_case(uv, s, d, lenp, &PL_utf8_tolower, "ToLc", "")
2387
2388 /* This additionally has the input parameter 'specials', which if non-zero will
2389  * cause this to use the specials hash for folding (meaning get full case
2390  * folding); otherwise, when zero, this implies a simple case fold */
2391 #define CALL_FOLD_CASE(uv, s, d, lenp, specials) _to_utf8_case(uv, s, d, lenp, &PL_utf8_tofold, "ToCf", (specials) ? "" : NULL)
2392
2393 UV
2394 Perl_to_uni_upper(pTHX_ UV c, U8* p, STRLEN *lenp)
2395 {
2396     /* Convert the Unicode character whose ordinal is <c> to its uppercase
2397      * version and store that in UTF-8 in <p> and its length in bytes in <lenp>.
2398      * Note that the <p> needs to be at least UTF8_MAXBYTES_CASE+1 bytes since
2399      * the changed version may be longer than the original character.
2400      *
2401      * The ordinal of the first character of the changed version is returned
2402      * (but note, as explained above, that there may be more.) */
2403
2404     PERL_ARGS_ASSERT_TO_UNI_UPPER;
2405
2406     if (c < 256) {
2407         return _to_upper_title_latin1((U8) c, p, lenp, 'S');
2408     }
2409
2410     uvchr_to_utf8(p, c);
2411     return CALL_UPPER_CASE(c, p, p, lenp);
2412 }
2413
2414 UV
2415 Perl_to_uni_title(pTHX_ UV c, U8* p, STRLEN *lenp)
2416 {
2417     PERL_ARGS_ASSERT_TO_UNI_TITLE;
2418
2419     if (c < 256) {
2420         return _to_upper_title_latin1((U8) c, p, lenp, 's');
2421     }
2422
2423     uvchr_to_utf8(p, c);
2424     return CALL_TITLE_CASE(c, p, p, lenp);
2425 }
2426
2427 STATIC U8
2428 S_to_lower_latin1(const U8 c, U8* p, STRLEN *lenp, const char dummy)
2429 {
2430     /* We have the latin1-range values compiled into the core, so just use
2431      * those, converting the result to UTF-8.  Since the result is always just
2432      * one character, we allow <p> to be NULL */
2433
2434     U8 converted = toLOWER_LATIN1(c);
2435
2436     PERL_UNUSED_ARG(dummy);
2437
2438     if (p != NULL) {
2439         if (NATIVE_BYTE_IS_INVARIANT(converted)) {
2440             *p = converted;
2441             *lenp = 1;
2442         }
2443         else {
2444             /* Result is known to always be < 256, so can use the EIGHT_BIT
2445              * macros */
2446             *p = UTF8_EIGHT_BIT_HI(converted);
2447             *(p+1) = UTF8_EIGHT_BIT_LO(converted);
2448             *lenp = 2;
2449         }
2450     }
2451     return converted;
2452 }
2453
2454 UV
2455 Perl_to_uni_lower(pTHX_ UV c, U8* p, STRLEN *lenp)
2456 {
2457     PERL_ARGS_ASSERT_TO_UNI_LOWER;
2458
2459     if (c < 256) {
2460         return to_lower_latin1((U8) c, p, lenp, 0 /* 0 is a dummy arg */ );
2461     }
2462
2463     uvchr_to_utf8(p, c);
2464     return CALL_LOWER_CASE(c, p, p, lenp);
2465 }
2466
2467 UV
2468 Perl__to_fold_latin1(pTHX_ const U8 c, U8* p, STRLEN *lenp, const unsigned int flags)
2469 {
2470     /* Corresponds to to_lower_latin1(); <flags> bits meanings:
2471      *      FOLD_FLAGS_NOMIX_ASCII iff non-ASCII to ASCII folds are prohibited
2472      *      FOLD_FLAGS_FULL  iff full folding is to be used;
2473      *
2474      *  Not to be used for locale folds
2475      */
2476
2477     UV converted;
2478
2479     PERL_ARGS_ASSERT__TO_FOLD_LATIN1;
2480     PERL_UNUSED_CONTEXT;
2481
2482     assert (! (flags & FOLD_FLAGS_LOCALE));
2483
2484     if (UNLIKELY(c == MICRO_SIGN)) {
2485         converted = GREEK_SMALL_LETTER_MU;
2486     }
2487 #if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
2488    || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
2489                                       || UNICODE_DOT_DOT_VERSION > 0)
2490     else if (   (flags & FOLD_FLAGS_FULL)
2491              && UNLIKELY(c == LATIN_SMALL_LETTER_SHARP_S))
2492     {
2493         /* If can't cross 127/128 boundary, can't return "ss"; instead return
2494          * two U+017F characters, as fc("\df") should eq fc("\x{17f}\x{17f}")
2495          * under those circumstances. */
2496         if (flags & FOLD_FLAGS_NOMIX_ASCII) {
2497             *lenp = 2 * sizeof(LATIN_SMALL_LETTER_LONG_S_UTF8) - 2;
2498             Copy(LATIN_SMALL_LETTER_LONG_S_UTF8 LATIN_SMALL_LETTER_LONG_S_UTF8,
2499                  p, *lenp, U8);
2500             return LATIN_SMALL_LETTER_LONG_S;
2501         }
2502         else {
2503             *(p)++ = 's';
2504             *p = 's';
2505             *lenp = 2;
2506             return 's';
2507         }
2508     }
2509 #endif
2510     else { /* In this range the fold of all other characters is their lower
2511               case */
2512         converted = toLOWER_LATIN1(c);
2513     }
2514
2515     if (UVCHR_IS_INVARIANT(converted)) {
2516         *p = (U8) converted;
2517         *lenp = 1;
2518     }
2519     else {
2520         *(p)++ = UTF8_TWO_BYTE_HI(converted);
2521         *p = UTF8_TWO_BYTE_LO(converted);
2522         *lenp = 2;
2523     }
2524
2525     return converted;
2526 }
2527
2528 UV
2529 Perl__to_uni_fold_flags(pTHX_ UV c, U8* p, STRLEN *lenp, U8 flags)
2530 {
2531
2532     /* Not currently externally documented, and subject to change
2533      *  <flags> bits meanings:
2534      *      FOLD_FLAGS_FULL  iff full folding is to be used;
2535      *      FOLD_FLAGS_LOCALE is set iff the rules from the current underlying
2536      *                        locale are to be used.
2537      *      FOLD_FLAGS_NOMIX_ASCII iff non-ASCII to ASCII folds are prohibited
2538      */
2539
2540     PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS;
2541
2542     if (flags & FOLD_FLAGS_LOCALE) {
2543         /* Treat a UTF-8 locale as not being in locale at all */
2544         if (IN_UTF8_CTYPE_LOCALE) {
2545             flags &= ~FOLD_FLAGS_LOCALE;
2546         }
2547         else {
2548             _CHECK_AND_WARN_PROBLEMATIC_LOCALE;
2549             goto needs_full_generality;
2550         }
2551     }
2552
2553     if (c < 256) {
2554         return _to_fold_latin1((U8) c, p, lenp,
2555                             flags & (FOLD_FLAGS_FULL | FOLD_FLAGS_NOMIX_ASCII));
2556     }
2557
2558     /* Here, above 255.  If no special needs, just use the macro */
2559     if ( ! (flags & (FOLD_FLAGS_LOCALE|FOLD_FLAGS_NOMIX_ASCII))) {
2560         uvchr_to_utf8(p, c);
2561         return CALL_FOLD_CASE(c, p, p, lenp, flags & FOLD_FLAGS_FULL);
2562     }
2563     else {  /* Otherwise, _toFOLD_utf8_flags has the intelligence to deal with
2564                the special flags. */
2565         U8 utf8_c[UTF8_MAXBYTES + 1];
2566
2567       needs_full_generality:
2568         uvchr_to_utf8(utf8_c, c);
2569         return _toFOLD_utf8_flags(utf8_c, utf8_c + sizeof(utf8_c), p, lenp, flags);
2570     }
2571 }
2572
2573 PERL_STATIC_INLINE bool
2574 S_is_utf8_common(pTHX_ const U8 *const p, SV **swash,
2575                  const char *const swashname, SV* const invlist)
2576 {
2577     /* returns a boolean giving whether or not the UTF8-encoded character that
2578      * starts at <p> is in the swash indicated by <swashname>.  <swash>
2579      * contains a pointer to where the swash indicated by <swashname>
2580      * is to be stored; which this routine will do, so that future calls will
2581      * look at <*swash> and only generate a swash if it is not null.  <invlist>
2582      * is NULL or an inversion list that defines the swash.  If not null, it
2583      * saves time during initialization of the swash.
2584      *
2585      * Note that it is assumed that the buffer length of <p> is enough to
2586      * contain all the bytes that comprise the character.  Thus, <*p> should
2587      * have been checked before this call for mal-formedness enough to assure
2588      * that. */
2589
2590     PERL_ARGS_ASSERT_IS_UTF8_COMMON;
2591
2592     /* The API should have included a length for the UTF-8 character in <p>,
2593      * but it doesn't.  We therefore assume that p has been validated at least
2594      * as far as there being enough bytes available in it to accommodate the
2595      * character without reading beyond the end, and pass that number on to the
2596      * validating routine */
2597     if (! isUTF8_CHAR(p, p + UTF8SKIP(p))) {
2598         _force_out_malformed_utf8_message(p, p + UTF8SKIP(p),
2599                                           _UTF8_NO_CONFIDENCE_IN_CURLEN,
2600                                           1 /* Die */ );
2601         NOT_REACHED; /* NOTREACHED */
2602     }
2603
2604     if (!*swash) {
2605         U8 flags = _CORE_SWASH_INIT_ACCEPT_INVLIST;
2606         *swash = _core_swash_init("utf8",
2607
2608                                   /* Only use the name if there is no inversion
2609                                    * list; otherwise will go out to disk */
2610                                   (invlist) ? "" : swashname,
2611
2612                                   &PL_sv_undef, 1, 0, invlist, &flags);
2613     }
2614
2615     return swash_fetch(*swash, p, TRUE) != 0;
2616 }
2617
2618 PERL_STATIC_INLINE bool
2619 S_is_utf8_common_with_len(pTHX_ const U8 *const p, const U8 * const e, SV **swash,
2620                           const char *const swashname, SV* const invlist)
2621 {
2622     /* returns a boolean giving whether or not the UTF8-encoded character that
2623      * starts at <p>, and extending no further than <e - 1> is in the swash
2624      * indicated by <swashname>.  <swash> contains a pointer to where the swash
2625      * indicated by <swashname> is to be stored; which this routine will do, so
2626      * that future calls will look at <*swash> and only generate a swash if it
2627      * is not null.  <invlist> is NULL or an inversion list that defines the
2628      * swash.  If not null, it saves time during initialization of the swash.
2629      */
2630
2631     PERL_ARGS_ASSERT_IS_UTF8_COMMON_WITH_LEN;
2632
2633     if (! isUTF8_CHAR(p, e)) {
2634         _force_out_malformed_utf8_message(p, e, 0, 1);
2635         NOT_REACHED; /* NOTREACHED */
2636     }
2637
2638     if (!*swash) {
2639         U8 flags = _CORE_SWASH_INIT_ACCEPT_INVLIST;
2640         *swash = _core_swash_init("utf8",
2641
2642                                   /* Only use the name if there is no inversion
2643                                    * list; otherwise will go out to disk */
2644                                   (invlist) ? "" : swashname,
2645
2646                                   &PL_sv_undef, 1, 0, invlist, &flags);
2647     }
2648
2649     return swash_fetch(*swash, p, TRUE) != 0;
2650 }
2651
2652 STATIC void
2653 S_warn_on_first_deprecated_use(pTHX_ const char * const name,
2654                                      const char * const alternative,
2655                                      const bool use_locale,
2656                                      const char * const file,
2657                                      const unsigned line)
2658 {
2659     const char * key;
2660
2661     PERL_ARGS_ASSERT_WARN_ON_FIRST_DEPRECATED_USE;
2662
2663     if (ckWARN_d(WARN_DEPRECATED)) {
2664
2665         key = Perl_form(aTHX_ "%s;%d;%s;%d", name, use_locale, file, line);
2666         if (! hv_fetch(PL_seen_deprecated_macro, key, strlen(key), 0)) {
2667             if (! PL_seen_deprecated_macro) {
2668                 PL_seen_deprecated_macro = newHV();
2669             }
2670             if (! hv_store(PL_seen_deprecated_macro, key,
2671                            strlen(key), &PL_sv_undef, 0))
2672             {
2673                 Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
2674             }
2675
2676             if (instr(file, "mathoms.c")) {
2677                 Perl_warner(aTHX_ WARN_DEPRECATED,
2678                             "In %s, line %d, starting in Perl v5.30, %s()"
2679                             " will be removed.  Avoid this message by"
2680                             " converting to use %s().\n",
2681                             file, line, name, alternative);
2682             }
2683             else {
2684                 Perl_warner(aTHX_ WARN_DEPRECATED,
2685                             "In %s, line %d, starting in Perl v5.30, %s() will"
2686                             " require an additional parameter.  Avoid this"
2687                             " message by converting to use %s().\n",
2688                             file, line, name, alternative);
2689             }
2690         }
2691     }
2692 }
2693
2694 bool
2695 Perl__is_utf8_FOO(pTHX_       U8   classnum,
2696                         const U8   * const p,
2697                         const char * const name,
2698                         const char * const alternative,
2699                         const bool use_utf8,
2700                         const bool use_locale,
2701                         const char * const file,
2702                         const unsigned line)
2703 {
2704     PERL_ARGS_ASSERT__IS_UTF8_FOO;
2705
2706     warn_on_first_deprecated_use(name, alternative, use_locale, file, line);
2707
2708     if (use_utf8 && UTF8_IS_ABOVE_LATIN1(*p)) {
2709
2710         switch (classnum) {
2711             case _CC_WORDCHAR:
2712             case _CC_DIGIT:
2713             case _CC_ALPHA:
2714             case _CC_LOWER:
2715             case _CC_UPPER:
2716             case _CC_PUNCT:
2717             case _CC_PRINT:
2718             case _CC_ALPHANUMERIC:
2719             case _CC_GRAPH:
2720             case _CC_CASED:
2721
2722                 return is_utf8_common(p,
2723                                       &PL_utf8_swash_ptrs[classnum],
2724                                       swash_property_names[classnum],
2725                                       PL_XPosix_ptrs[classnum]);
2726
2727             case _CC_SPACE:
2728                 return is_XPERLSPACE_high(p);
2729             case _CC_BLANK:
2730                 return is_HORIZWS_high(p);
2731             case _CC_XDIGIT:
2732                 return is_XDIGIT_high(p);
2733             case _CC_CNTRL:
2734                 return 0;
2735             case _CC_ASCII:
2736                 return 0;
2737             case _CC_VERTSPACE:
2738                 return is_VERTWS_high(p);
2739             case _CC_IDFIRST:
2740                 if (! PL_utf8_perl_idstart) {
2741                     PL_utf8_perl_idstart
2742                                 = _new_invlist_C_array(_Perl_IDStart_invlist);
2743                 }
2744                 return is_utf8_common(p, &PL_utf8_perl_idstart,
2745                                       "_Perl_IDStart", NULL);
2746             case _CC_IDCONT:
2747                 if (! PL_utf8_perl_idcont) {
2748                     PL_utf8_perl_idcont
2749                                 = _new_invlist_C_array(_Perl_IDCont_invlist);
2750                 }
2751                 return is_utf8_common(p, &PL_utf8_perl_idcont,
2752                                       "_Perl_IDCont", NULL);
2753         }
2754     }
2755
2756     /* idcont is the same as wordchar below 256 */
2757     if (classnum == _CC_IDCONT) {
2758         classnum = _CC_WORDCHAR;
2759     }
2760     else if (classnum == _CC_IDFIRST) {
2761         if (*p == '_') {
2762             return TRUE;
2763         }
2764         classnum = _CC_ALPHA;
2765     }
2766
2767     if (! use_locale) {
2768         if (! use_utf8 || UTF8_IS_INVARIANT(*p)) {
2769             return _generic_isCC(*p, classnum);
2770         }
2771
2772         return _generic_isCC(EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p + 1 )), classnum);
2773     }
2774     else {
2775         if (! use_utf8 || UTF8_IS_INVARIANT(*p)) {
2776             return isFOO_lc(classnum, *p);
2777         }
2778
2779         return isFOO_lc(classnum, EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p + 1 )));
2780     }
2781
2782     NOT_REACHED; /* NOTREACHED */
2783 }
2784
2785 bool
2786 Perl__is_utf8_FOO_with_len(pTHX_ const U8 classnum, const U8 *p,
2787                                                             const U8 * const e)
2788 {
2789     PERL_ARGS_ASSERT__IS_UTF8_FOO_WITH_LEN;
2790
2791     assert(classnum < _FIRST_NON_SWASH_CC);
2792
2793     return is_utf8_common_with_len(p,
2794                                    e,
2795                                    &PL_utf8_swash_ptrs[classnum],
2796                                    swash_property_names[classnum],
2797                                    PL_XPosix_ptrs[classnum]);
2798 }
2799
2800 bool
2801 Perl__is_utf8_perl_idstart_with_len(pTHX_ const U8 *p, const U8 * const e)
2802 {
2803     SV* invlist = NULL;
2804
2805     PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART_WITH_LEN;
2806
2807     if (! PL_utf8_perl_idstart) {
2808         invlist = _new_invlist_C_array(_Perl_IDStart_invlist);
2809     }
2810     return is_utf8_common_with_len(p, e, &PL_utf8_perl_idstart,
2811                                       "_Perl_IDStart", invlist);
2812 }
2813
2814 bool
2815 Perl__is_utf8_xidstart(pTHX_ const U8 *p)
2816 {
2817     PERL_ARGS_ASSERT__IS_UTF8_XIDSTART;
2818
2819     if (*p == '_')
2820         return TRUE;
2821     return is_utf8_common(p, &PL_utf8_xidstart, "XIdStart", NULL);
2822 }
2823
2824 bool
2825 Perl__is_utf8_perl_idcont_with_len(pTHX_ const U8 *p, const U8 * const e)
2826 {
2827     SV* invlist = NULL;
2828
2829     PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT_WITH_LEN;
2830
2831     if (! PL_utf8_perl_idcont) {
2832         invlist = _new_invlist_C_array(_Perl_IDCont_invlist);
2833     }
2834     return is_utf8_common_with_len(p, e, &PL_utf8_perl_idcont,
2835                                    "_Perl_IDCont", invlist);
2836 }
2837
2838 bool
2839 Perl__is_utf8_idcont(pTHX_ const U8 *p)
2840 {
2841     PERL_ARGS_ASSERT__IS_UTF8_IDCONT;
2842
2843     return is_utf8_common(p, &PL_utf8_idcont, "IdContinue", NULL);
2844 }
2845
2846 bool
2847 Perl__is_utf8_xidcont(pTHX_ const U8 *p)
2848 {
2849     PERL_ARGS_ASSERT__IS_UTF8_XIDCONT;
2850
2851     return is_utf8_common(p, &PL_utf8_idcont, "XIdContinue", NULL);
2852 }
2853
2854 bool
2855 Perl__is_utf8_mark(pTHX_ const U8 *p)
2856 {
2857     PERL_ARGS_ASSERT__IS_UTF8_MARK;
2858
2859     return is_utf8_common(p, &PL_utf8_mark, "IsM", NULL);
2860 }
2861
2862     /* change namve uv1 to 'from' */
2863 STATIC UV
2864 S__to_utf8_case(pTHX_ const UV uv1, const U8 *p, U8* ustrp, STRLEN *lenp,
2865                 SV **swashp, const char *normal, const char *special)
2866 {
2867     STRLEN len = 0;
2868
2869     PERL_ARGS_ASSERT__TO_UTF8_CASE;
2870
2871     /* For code points that don't change case, we already know that the output
2872      * of this function is the unchanged input, so we can skip doing look-ups
2873      * for them.  Unfortunately the case-changing code points are scattered
2874      * around.  But there are some long consecutive ranges where there are no
2875      * case changing code points.  By adding tests, we can eliminate the lookup
2876      * for all the ones in such ranges.  This is currently done here only for
2877      * just a few cases where the scripts are in common use in modern commerce
2878      * (and scripts adjacent to those which can be included without additional
2879      * tests). */
2880
2881     if (uv1 >= 0x0590) {
2882         /* This keeps from needing further processing the code points most
2883          * likely to be used in the following non-cased scripts: Hebrew,
2884          * Arabic, Syriac, Thaana, NKo, Samaritan, Mandaic, Devanagari,
2885          * Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada,
2886          * Malayalam, Sinhala, Thai, Lao, Tibetan, Myanmar */
2887         if (uv1 < 0x10A0) {
2888             goto cases_to_self;
2889         }
2890
2891         /* The following largish code point ranges also don't have case
2892          * changes, but khw didn't think they warranted extra tests to speed
2893          * them up (which would slightly slow down everything else above them):
2894          * 1100..139F   Hangul Jamo, Ethiopic
2895          * 1400..1CFF   Unified Canadian Aboriginal Syllabics, Ogham, Runic,
2896          *              Tagalog, Hanunoo, Buhid, Tagbanwa, Khmer, Mongolian,
2897          *              Limbu, Tai Le, New Tai Lue, Buginese, Tai Tham,
2898          *              Combining Diacritical Marks Extended, Balinese,
2899          *              Sundanese, Batak, Lepcha, Ol Chiki
2900          * 2000..206F   General Punctuation
2901          */
2902
2903         if (uv1 >= 0x2D30) {
2904
2905             /* This keeps the from needing further processing the code points
2906              * most likely to be used in the following non-cased major scripts:
2907              * CJK, Katakana, Hiragana, plus some less-likely scripts.
2908              *
2909              * (0x2D30 above might have to be changed to 2F00 in the unlikely
2910              * event that Unicode eventually allocates the unused block as of
2911              * v8.0 2FE0..2FEF to code points that are cased.  khw has verified
2912              * that the test suite will start having failures to alert you
2913              * should that happen) */
2914             if (uv1 < 0xA640) {
2915                 goto cases_to_self;
2916             }
2917
2918             if (uv1 >= 0xAC00) {
2919                 if (UNLIKELY(UNICODE_IS_SURROGATE(uv1))) {
2920                     if (ckWARN_d(WARN_SURROGATE)) {
2921                         const char* desc = (PL_op) ? OP_DESC(PL_op) : normal;
2922                         Perl_warner(aTHX_ packWARN(WARN_SURROGATE),
2923                             "Operation \"%s\" returns its argument for UTF-16 surrogate U+%04" UVXf, desc, uv1);
2924                     }
2925                     goto cases_to_self;
2926                 }
2927
2928                 /* AC00..FAFF Catches Hangul syllables and private use, plus
2929                  * some others */
2930                 if (uv1 < 0xFB00) {
2931                     goto cases_to_self;
2932
2933                 }
2934
2935                 if (UNLIKELY(UNICODE_IS_SUPER(uv1))) {
2936                     if (   UNLIKELY(uv1 > MAX_NON_DEPRECATED_CP)
2937                         && ckWARN_d(WARN_DEPRECATED))
2938                     {
2939                         Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
2940                                 cp_above_legal_max, uv1, MAX_NON_DEPRECATED_CP);
2941                     }
2942                     if (ckWARN_d(WARN_NON_UNICODE)) {
2943                         const char* desc = (PL_op) ? OP_DESC(PL_op) : normal;
2944                         Perl_warner(aTHX_ packWARN(WARN_NON_UNICODE),
2945                             "Operation \"%s\" returns its argument for non-Unicode code point 0x%04" UVXf, desc, uv1);
2946                     }
2947                     goto cases_to_self;
2948                 }
2949 #ifdef HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C
2950                 if (UNLIKELY(uv1
2951                     > HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C))
2952                 {
2953
2954                     /* As of this writing, this means we avoid swash creation
2955                      * for anything beyond low Plane 1 */
2956                     goto cases_to_self;
2957                 }
2958 #endif
2959             }
2960         }
2961
2962         /* Note that non-characters are perfectly legal, so no warning should
2963          * be given.  There are so few of them, that it isn't worth the extra
2964          * tests to avoid swash creation */
2965     }
2966
2967     if (!*swashp) /* load on-demand */
2968          *swashp = _core_swash_init("utf8", normal, &PL_sv_undef, 4, 0, NULL, NULL);
2969
2970     if (special) {
2971          /* It might be "special" (sometimes, but not always,
2972           * a multicharacter mapping) */
2973          HV *hv = NULL;
2974          SV **svp;
2975
2976          /* If passed in the specials name, use that; otherwise use any
2977           * given in the swash */
2978          if (*special != '\0') {
2979             hv = get_hv(special, 0);
2980         }
2981         else {
2982             svp = hv_fetchs(MUTABLE_HV(SvRV(*swashp)), "SPECIALS", 0);
2983             if (svp) {
2984                 hv = MUTABLE_HV(SvRV(*svp));
2985             }
2986         }
2987
2988          if (hv
2989              && (svp = hv_fetch(hv, (const char*)p, UVCHR_SKIP(uv1), FALSE))
2990              && (*svp))
2991          {
2992              const char *s;
2993
2994               s = SvPV_const(*svp, len);
2995               if (len == 1)
2996                   /* EIGHTBIT */
2997                    len = uvchr_to_utf8(ustrp, *(U8*)s) - ustrp;
2998               else {
2999                    Copy(s, ustrp, len, U8);
3000               }
3001          }
3002     }
3003
3004     if (!len && *swashp) {
3005         const UV uv2 = swash_fetch(*swashp, p, TRUE /* => is UTF-8 */);
3006
3007          if (uv2) {
3008               /* It was "normal" (a single character mapping). */
3009               len = uvchr_to_utf8(ustrp, uv2) - ustrp;
3010          }
3011     }
3012
3013     if (len) {
3014         if (lenp) {
3015             *lenp = len;
3016         }
3017         return valid_utf8_to_uvchr(ustrp, 0);
3018     }
3019
3020     /* Here, there was no mapping defined, which means that the code point maps
3021      * to itself.  Return the inputs */
3022   cases_to_self:
3023     len = UTF8SKIP(p);
3024     if (p != ustrp) {   /* Don't copy onto itself */
3025         Copy(p, ustrp, len, U8);
3026     }
3027
3028     if (lenp)
3029          *lenp = len;
3030
3031     return uv1;
3032
3033 }
3034
3035 STATIC UV
3036 S_check_locale_boundary_crossing(pTHX_ const U8* const p, const UV result, U8* const ustrp, STRLEN *lenp)
3037 {
3038     /* This is called when changing the case of a UTF-8-encoded character above
3039      * the Latin1 range, and the operation is in a non-UTF-8 locale.  If the
3040      * result contains a character that crosses the 255/256 boundary, disallow
3041      * the change, and return the original code point.  See L<perlfunc/lc> for
3042      * why;
3043      *
3044      * p        points to the original string whose case was changed; assumed
3045      *          by this routine to be well-formed
3046      * result   the code point of the first character in the changed-case string
3047      * ustrp    points to the changed-case string (<result> represents its first char)
3048      * lenp     points to the length of <ustrp> */
3049
3050     UV original;    /* To store the first code point of <p> */
3051
3052     PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING;
3053
3054     assert(UTF8_IS_ABOVE_LATIN1(*p));
3055
3056     /* We know immediately if the first character in the string crosses the
3057      * boundary, so can skip */
3058     if (result > 255) {
3059
3060         /* Look at every character in the result; if any cross the
3061         * boundary, the whole thing is disallowed */
3062         U8* s = ustrp + UTF8SKIP(ustrp);
3063         U8* e = ustrp + *lenp;
3064         while (s < e) {
3065             if (! UTF8_IS_ABOVE_LATIN1(*s)) {
3066                 goto bad_crossing;
3067             }
3068             s += UTF8SKIP(s);
3069         }
3070
3071         /* Here, no characters crossed, result is ok as-is, but we warn. */
3072         _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(p, p + UTF8SKIP(p));
3073         return result;
3074     }
3075
3076   bad_crossing:
3077
3078     /* Failed, have to return the original */
3079     original = valid_utf8_to_uvchr(p, lenp);
3080
3081     /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3082     Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3083                            "Can't do %s(\"\\x{%" UVXf "}\") on non-UTF-8 locale; "
3084                            "resolved to \"\\x{%" UVXf "}\".",
3085                            OP_DESC(PL_op),
3086                            original,
3087                            original);
3088     Copy(p, ustrp, *lenp, char);
3089     return original;
3090 }
3091
3092 STATIC U32
3093 S_check_and_deprecate(pTHX_ const U8 *p,
3094                             const U8 **e,
3095                             const unsigned int type,    /* See below */
3096                             const bool use_locale,      /* Is this a 'LC_'
3097                                                            macro call? */
3098                             const char * const file,
3099                             const unsigned line)
3100 {
3101     /* This is a temporary function to deprecate the unsafe calls to the case
3102      * changing macros and functions.  It keeps all the special stuff in just
3103      * one place.
3104      *
3105      * It updates *e with the pointer to the end of the input string.  If using
3106      * the old-style macros, *e is NULL on input, and so this function assumes
3107      * the input string is long enough to hold the entire UTF-8 sequence, and
3108      * sets *e accordingly, but it then returns a flag to pass the
3109      * utf8n_to_uvchr(), to tell it that this size is a guess, and to avoid
3110      * using the full length if possible.
3111      *
3112      * It also does the assert that *e > p when *e is not NULL.  This should be
3113      * migrated to the callers when this function gets deleted.
3114      *
3115      * The 'type' parameter is used for the caller to specify which case
3116      * changing function this is called from: */
3117
3118 #       define DEPRECATE_TO_UPPER 0
3119 #       define DEPRECATE_TO_TITLE 1
3120 #       define DEPRECATE_TO_LOWER 2
3121 #       define DEPRECATE_TO_FOLD  3
3122
3123     U32 utf8n_flags = 0;
3124     const char * name;
3125     const char * alternative;
3126
3127     PERL_ARGS_ASSERT_CHECK_AND_DEPRECATE;
3128
3129     if (*e == NULL) {
3130         utf8n_flags = _UTF8_NO_CONFIDENCE_IN_CURLEN;
3131         *e = p + UTF8SKIP(p);
3132
3133         /* For mathoms.c calls, we use the function name we know is stored
3134          * there.  It could be part of a larger path */
3135         if (type == DEPRECATE_TO_UPPER) {
3136             name = instr(file, "mathoms.c")
3137                    ? "to_utf8_upper"
3138                    : "toUPPER_utf8";
3139             alternative = "toUPPER_utf8_safe";
3140         }
3141         else if (type == DEPRECATE_TO_TITLE) {
3142             name = instr(file, "mathoms.c")
3143                    ? "to_utf8_title"
3144                    : "toTITLE_utf8";
3145             alternative = "toTITLE_utf8_safe";
3146         }
3147         else if (type == DEPRECATE_TO_LOWER) {
3148             name = instr(file, "mathoms.c")
3149                    ? "to_utf8_lower"
3150                    : "toLOWER_utf8";
3151             alternative = "toLOWER_utf8_safe";
3152         }
3153         else if (type == DEPRECATE_TO_FOLD) {
3154             name = instr(file, "mathoms.c")
3155                    ? "to_utf8_fold"
3156                    : "toFOLD_utf8";
3157             alternative = "toFOLD_utf8_safe";
3158         }
3159         else Perl_croak(aTHX_ "panic: Unexpected case change type");
3160
3161         warn_on_first_deprecated_use(name, alternative, use_locale, file, line);
3162     }
3163     else {
3164         assert (p < *e);
3165     }
3166
3167     return utf8n_flags;
3168 }
3169
3170 /* The process for changing the case is essentially the same for the four case
3171  * change types, except there are complications for folding.  Otherwise the
3172  * difference is only which case to change to.  To make sure that they all do
3173  * the same thing, the bodies of the functions are extracted out into the
3174  * following two macros.  The functions are written with the same variable
3175  * names, and these are known and used inside these macros.  It would be
3176  * better, of course, to have inline functions to do it, but since different
3177  * macros are called, depending on which case is being changed to, this is not
3178  * feasible in C (to khw's knowledge).  Two macros are created so that the fold
3179  * function can start with the common start macro, then finish with its special
3180  * handling; while the other three cases can just use the common end macro.
3181  *
3182  * The algorithm is to use the proper (passed in) macro or function to change
3183  * the case for code points that are below 256.  The macro is used if using
3184  * locale rules for the case change; the function if not.  If the code point is
3185  * above 255, it is computed from the input UTF-8, and another macro is called
3186  * to do the conversion.  If necessary, the output is converted to UTF-8.  If
3187  * using a locale, we have to check that the change did not cross the 255/256
3188  * boundary, see check_locale_boundary_crossing() for further details.
3189  *
3190  * The macros are split with the correct case change for the below-256 case
3191  * stored into 'result', and in the middle of an else clause for the above-255
3192  * case.  At that point in the 'else', 'result' is not the final result, but is
3193  * the input code point calculated from the UTF-8.  The fold code needs to
3194  * realize all this and take it from there.
3195  *
3196  * If you read the two macros as sequential, it's easier to understand what's
3197  * going on. */
3198 #define CASE_CHANGE_BODY_START(locale_flags, LC_L1_change_macro, L1_func,    \
3199                                L1_func_extra_param)                          \
3200                                                                              \
3201     if (flags & (locale_flags)) {                                            \
3202         /* Treat a UTF-8 locale as not being in locale at all */             \
3203         if (IN_UTF8_CTYPE_LOCALE) {                                          \
3204             flags &= ~(locale_flags);                                        \
3205         }                                                                    \
3206         else {                                                               \
3207             _CHECK_AND_WARN_PROBLEMATIC_LOCALE;                              \
3208         }                                                                    \
3209     }                                                                        \
3210                                                                              \
3211     if (UTF8_IS_INVARIANT(*p)) {                                             \
3212         if (flags & (locale_flags)) {                                        \
3213             result = LC_L1_change_macro(*p);                                 \
3214         }                                                                    \
3215         else {                                                               \
3216             return L1_func(*p, ustrp, lenp, L1_func_extra_param);            \
3217         }                                                                    \
3218     }                                                                        \
3219     else if UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(p, e) {                          \
3220         if (flags & (locale_flags)) {                                        \
3221             result = LC_L1_change_macro(EIGHT_BIT_UTF8_TO_NATIVE(*p,         \
3222                                                                  *(p+1)));   \
3223         }                                                                    \
3224         else {                                                               \
3225             return L1_func(EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p+1)),             \
3226                            ustrp, lenp,  L1_func_extra_param);               \
3227         }                                                                    \
3228     }                                                                        \
3229     else {  /* malformed UTF-8 or ord above 255 */                           \
3230         STRLEN len_result;                                                   \
3231         result = utf8n_to_uvchr(p, e - p, &len_result, UTF8_CHECK_ONLY);     \
3232         if (len_result == (STRLEN) -1) {                                     \
3233             _force_out_malformed_utf8_message(p, e, utf8n_flags,             \
3234                                                             1 /* Die */ );   \
3235         }
3236
3237 #define CASE_CHANGE_BODY_END(locale_flags, change_macro)                     \
3238         result = change_macro(result, p, ustrp, lenp);                       \
3239                                                                              \
3240         if (flags & (locale_flags)) {                                        \
3241             result = check_locale_boundary_crossing(p, result, ustrp, lenp); \
3242         }                                                                    \
3243         return result;                                                       \
3244     }                                                                        \
3245                                                                              \
3246     /* Here, used locale rules.  Convert back to UTF-8 */                    \
3247     if (UTF8_IS_INVARIANT(result)) {                                         \
3248         *ustrp = (U8) result;                                                \
3249         *lenp = 1;                                                           \
3250     }                                                                        \
3251     else {                                                                   \
3252         *ustrp = UTF8_EIGHT_BIT_HI((U8) result);                             \
3253         *(ustrp + 1) = UTF8_EIGHT_BIT_LO((U8) result);                       \
3254         *lenp = 2;                                                           \
3255     }                                                                        \
3256                                                                              \
3257     return result;
3258
3259 /*
3260 =for apidoc to_utf8_upper
3261
3262 Instead use L</toUPPER_utf8_safe>.
3263
3264 =cut */
3265
3266 /* Not currently externally documented, and subject to change:
3267  * <flags> is set iff iff the rules from the current underlying locale are to
3268  *         be used. */
3269
3270 UV
3271 Perl__to_utf8_upper_flags(pTHX_ const U8 *p,
3272                                 const U8 *e,
3273                                 U8* ustrp,
3274                                 STRLEN *lenp,
3275                                 bool flags,
3276                                 const char * const file,
3277                                 const int line)
3278 {
3279     UV result;
3280     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_UPPER,
3281                                                 cBOOL(flags), file, line);
3282
3283     PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS;
3284
3285     /* ~0 makes anything non-zero in 'flags' mean we are using locale rules */
3286     /* 2nd char of uc(U+DF) is 'S' */
3287     CASE_CHANGE_BODY_START(~0, toUPPER_LC, _to_upper_title_latin1, 'S');
3288     CASE_CHANGE_BODY_END  (~0, CALL_UPPER_CASE);
3289 }
3290
3291 /*
3292 =for apidoc to_utf8_title
3293
3294 Instead use L</toTITLE_utf8_safe>.
3295
3296 =cut */
3297
3298 /* Not currently externally documented, and subject to change:
3299  * <flags> is set iff the rules from the current underlying locale are to be
3300  *         used.  Since titlecase is not defined in POSIX, for other than a
3301  *         UTF-8 locale, uppercase is used instead for code points < 256.
3302  */
3303
3304 UV
3305 Perl__to_utf8_title_flags(pTHX_ const U8 *p,
3306                                 const U8 *e,
3307                                 U8* ustrp,
3308                                 STRLEN *lenp,
3309                                 bool flags,
3310                                 const char * const file,
3311                                 const int line)
3312 {
3313     UV result;
3314     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_TITLE,
3315                                                 cBOOL(flags), file, line);
3316
3317     PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS;
3318
3319     /* 2nd char of ucfirst(U+DF) is 's' */
3320     CASE_CHANGE_BODY_START(~0, toUPPER_LC, _to_upper_title_latin1, 's');
3321     CASE_CHANGE_BODY_END  (~0, CALL_TITLE_CASE);
3322 }
3323
3324 /*
3325 =for apidoc to_utf8_lower
3326
3327 Instead use L</toLOWER_utf8_safe>.
3328
3329 =cut */
3330
3331 /* Not currently externally documented, and subject to change:
3332  * <flags> is set iff iff the rules from the current underlying locale are to
3333  *         be used.
3334  */
3335
3336 UV
3337 Perl__to_utf8_lower_flags(pTHX_ const U8 *p,
3338                                 const U8 *e,
3339                                 U8* ustrp,
3340                                 STRLEN *lenp,
3341                                 bool flags,
3342                                 const char * const file,
3343                                 const int line)
3344 {
3345     UV result;
3346     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_LOWER,
3347                                                 cBOOL(flags), file, line);
3348
3349     PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS;
3350
3351     CASE_CHANGE_BODY_START(~0, toLOWER_LC, to_lower_latin1, 0 /* 0 is dummy */)
3352     CASE_CHANGE_BODY_END  (~0, CALL_LOWER_CASE)
3353 }
3354
3355 /*
3356 =for apidoc to_utf8_fold
3357
3358 Instead use L</toFOLD_utf8_safe>.
3359
3360 =cut */
3361
3362 /* Not currently externally documented, and subject to change,
3363  * in <flags>
3364  *      bit FOLD_FLAGS_LOCALE is set iff the rules from the current underlying
3365  *                            locale are to be used.
3366  *      bit FOLD_FLAGS_FULL   is set iff full case folds are to be used;
3367  *                            otherwise simple folds
3368  *      bit FOLD_FLAGS_NOMIX_ASCII is set iff folds of non-ASCII to ASCII are
3369  *                            prohibited
3370  */
3371
3372 UV
3373 Perl__to_utf8_fold_flags(pTHX_ const U8 *p,
3374                                const U8 *e,
3375                                U8* ustrp,
3376                                STRLEN *lenp,
3377                                U8 flags,
3378                                const char * const file,
3379                                const int line)
3380 {
3381     UV result;
3382     const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_FOLD,
3383                                                 cBOOL(flags), file, line);
3384
3385     PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS;
3386
3387     /* These are mutually exclusive */
3388     assert (! ((flags & FOLD_FLAGS_LOCALE) && (flags & FOLD_FLAGS_NOMIX_ASCII)));
3389
3390     assert(p != ustrp); /* Otherwise overwrites */
3391
3392     CASE_CHANGE_BODY_START(FOLD_FLAGS_LOCALE, toFOLD_LC, _to_fold_latin1,
3393                  ((flags) & (FOLD_FLAGS_FULL | FOLD_FLAGS_NOMIX_ASCII)));
3394
3395         result = CALL_FOLD_CASE(result, p, ustrp, lenp, flags & FOLD_FLAGS_FULL);
3396
3397         if (flags & FOLD_FLAGS_LOCALE) {
3398
3399 #           define LONG_S_T      LATIN_SMALL_LIGATURE_LONG_S_T_UTF8
3400             const unsigned int long_s_t_len    = sizeof(LONG_S_T) - 1;
3401
3402 #         ifdef LATIN_CAPITAL_LETTER_SHARP_S_UTF8
3403 #           define CAP_SHARP_S   LATIN_CAPITAL_LETTER_SHARP_S_UTF8
3404
3405             const unsigned int cap_sharp_s_len = sizeof(CAP_SHARP_S) - 1;
3406
3407             /* Special case these two characters, as what normally gets
3408              * returned under locale doesn't work */
3409             if (UTF8SKIP(p) == cap_sharp_s_len
3410                 && memEQ((char *) p, CAP_SHARP_S, cap_sharp_s_len))
3411             {
3412                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3413                 Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3414                               "Can't do fc(\"\\x{1E9E}\") on non-UTF-8 locale; "
3415                               "resolved to \"\\x{17F}\\x{17F}\".");
3416                 goto return_long_s;
3417             }
3418             else
3419 #endif
3420                  if (UTF8SKIP(p) == long_s_t_len
3421                      && memEQ((char *) p, LONG_S_T, long_s_t_len))
3422             {
3423                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3424                 Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3425                               "Can't do fc(\"\\x{FB05}\") on non-UTF-8 locale; "
3426                               "resolved to \"\\x{FB06}\".");
3427                 goto return_ligature_st;
3428             }
3429
3430 #if    UNICODE_MAJOR_VERSION   == 3         \
3431     && UNICODE_DOT_VERSION     == 0         \
3432     && UNICODE_DOT_DOT_VERSION == 1
3433 #           define DOTTED_I   LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_UTF8
3434
3435             /* And special case this on this Unicode version only, for the same
3436              * reaons the other two are special cased.  They would cross the
3437              * 255/256 boundary which is forbidden under /l, and so the code
3438              * wouldn't catch that they are equivalent (which they are only in
3439              * this release) */
3440             else if (UTF8SKIP(p) == sizeof(DOTTED_I) - 1
3441                      && memEQ((char *) p, DOTTED_I, sizeof(DOTTED_I) - 1))
3442             {
3443                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
3444                 Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
3445                               "Can't do fc(\"\\x{0130}\") on non-UTF-8 locale; "
3446                               "resolved to \"\\x{0131}\".");
3447                 goto return_dotless_i;
3448             }
3449 #endif
3450
3451             return check_locale_boundary_crossing(p, result, ustrp, lenp);
3452         }
3453         else if (! (flags & FOLD_FLAGS_NOMIX_ASCII)) {
3454             return result;
3455         }
3456         else {
3457             /* This is called when changing the case of a UTF-8-encoded
3458              * character above the ASCII range, and the result should not
3459              * contain an ASCII character. */
3460
3461             UV original;    /* To store the first code point of <p> */
3462
3463             /* Look at every character in the result; if any cross the
3464             * boundary, the whole thing is disallowed */
3465             U8* s = ustrp;
3466             U8* e = ustrp + *lenp;
3467             while (s < e) {
3468                 if (isASCII(*s)) {
3469                     /* Crossed, have to return the original */
3470                     original = valid_utf8_to_uvchr(p, lenp);
3471
3472                     /* But in these instances, there is an alternative we can
3473                      * return that is valid */
3474                     if (original == LATIN_SMALL_LETTER_SHARP_S
3475 #ifdef LATIN_CAPITAL_LETTER_SHARP_S /* not defined in early Unicode releases */
3476                         || original == LATIN_CAPITAL_LETTER_SHARP_S
3477 #endif
3478                     ) {
3479                         goto return_long_s;
3480                     }
3481                     else if (original == LATIN_SMALL_LIGATURE_LONG_S_T) {
3482                         goto return_ligature_st;
3483                     }
3484 #if    UNICODE_MAJOR_VERSION   == 3         \
3485     && UNICODE_DOT_VERSION     == 0         \
3486     && UNICODE_DOT_DOT_VERSION == 1
3487
3488                     else if (original == LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE) {
3489                         goto return_dotless_i;
3490                     }
3491 #endif
3492                     Copy(p, ustrp, *lenp, char);
3493                     return original;
3494                 }
3495                 s += UTF8SKIP(s);
3496             }
3497
3498             /* Here, no characters crossed, result is ok as-is */
3499             return result;
3500         }
3501     }
3502
3503     /* Here, used locale rules.  Convert back to UTF-8 */
3504     if (UTF8_IS_INVARIANT(result)) {
3505         *ustrp = (U8) result;
3506         *lenp = 1;
3507     }
3508     else {
3509         *ustrp = UTF8_EIGHT_BIT_HI((U8) result);
3510         *(ustrp + 1) = UTF8_EIGHT_BIT_LO((U8) result);
3511         *lenp = 2;
3512     }
3513
3514     return result;
3515
3516   return_long_s:
3517     /* Certain folds to 'ss' are prohibited by the options, but they do allow
3518      * folds to a string of two of these characters.  By returning this
3519      * instead, then, e.g.,
3520      *      fc("\x{1E9E}") eq fc("\x{17F}\x{17F}")
3521      * works. */
3522
3523     *lenp = 2 * sizeof(LATIN_SMALL_LETTER_LONG_S_UTF8) - 2;
3524     Copy(LATIN_SMALL_LETTER_LONG_S_UTF8 LATIN_SMALL_LETTER_LONG_S_UTF8,
3525         ustrp, *lenp, U8);
3526     return LATIN_SMALL_LETTER_LONG_S;
3527
3528   return_ligature_st:
3529     /* Two folds to 'st' are prohibited by the options; instead we pick one and
3530      * have the other one fold to it */
3531
3532     *lenp = sizeof(LATIN_SMALL_LIGATURE_ST_UTF8) - 1;
3533     Copy(LATIN_SMALL_LIGATURE_ST_UTF8, ustrp, *lenp, U8);
3534     return LATIN_SMALL_LIGATURE_ST;
3535
3536 #if    UNICODE_MAJOR_VERSION   == 3         \
3537     && UNICODE_DOT_VERSION     == 0         \
3538     && UNICODE_DOT_DOT_VERSION == 1
3539
3540   return_dotless_i:
3541     *lenp = sizeof(LATIN_SMALL_LETTER_DOTLESS_I_UTF8) - 1;
3542     Copy(LATIN_SMALL_LETTER_DOTLESS_I_UTF8, ustrp, *lenp, U8);
3543     return LATIN_SMALL_LETTER_DOTLESS_I;
3544
3545 #endif
3546
3547 }
3548
3549 /* Note:
3550  * Returns a "swash" which is a hash described in utf8.c:Perl_swash_fetch().
3551  * C<pkg> is a pointer to a package name for SWASHNEW, should be "utf8".
3552  * For other parameters, see utf8::SWASHNEW in lib/utf8_heavy.pl.
3553  */
3554
3555 SV*
3556 Perl_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv, I32 minbits, I32 none)
3557 {
3558     PERL_ARGS_ASSERT_SWASH_INIT;
3559
3560     /* Returns a copy of a swash initiated by the called function.  This is the
3561      * public interface, and returning a copy prevents others from doing
3562      * mischief on the original */
3563
3564     return newSVsv(_core_swash_init(pkg, name, listsv, minbits, none, NULL, NULL));
3565 }
3566
3567 SV*
3568 Perl__core_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv, I32 minbits, I32 none, SV* invlist, U8* const flags_p)
3569 {
3570
3571     /*NOTE NOTE NOTE - If you want to use "return" in this routine you MUST
3572      * use the following define */
3573
3574 #define CORE_SWASH_INIT_RETURN(x)   \
3575     PL_curpm= old_PL_curpm;         \
3576     return x
3577
3578     /* Initialize and return a swash, creating it if necessary.  It does this
3579      * by calling utf8_heavy.pl in the general case.  The returned value may be
3580      * the swash's inversion list instead if the input parameters allow it.
3581      * Which is returned should be immaterial to callers, as the only
3582      * operations permitted on a swash, swash_fetch(), _get_swash_invlist(),
3583      * and swash_to_invlist() handle both these transparently.
3584      *
3585      * This interface should only be used by functions that won't destroy or
3586      * adversely change the swash, as doing so affects all other uses of the
3587      * swash in the program; the general public should use 'Perl_swash_init'
3588      * instead.
3589      *
3590      * pkg  is the name of the package that <name> should be in.
3591      * name is the name of the swash to find.  Typically it is a Unicode
3592      *      property name, including user-defined ones
3593      * listsv is a string to initialize the swash with.  It must be of the form
3594      *      documented as the subroutine return value in
3595      *      L<perlunicode/User-Defined Character Properties>
3596      * minbits is the number of bits required to represent each data element.
3597      *      It is '1' for binary properties.
3598      * none I (khw) do not understand this one, but it is used only in tr///.
3599      * invlist is an inversion list to initialize the swash with (or NULL)
3600      * flags_p if non-NULL is the address of various input and output flag bits
3601      *      to the routine, as follows:  ('I' means is input to the routine;
3602      *      'O' means output from the routine.  Only flags marked O are
3603      *      meaningful on return.)
3604      *  _CORE_SWASH_INIT_USER_DEFINED_PROPERTY indicates if the swash
3605      *      came from a user-defined property.  (I O)
3606      *  _CORE_SWASH_INIT_RETURN_IF_UNDEF indicates that instead of croaking
3607      *      when the swash cannot be located, to simply return NULL. (I)
3608      *  _CORE_SWASH_INIT_ACCEPT_INVLIST indicates that the caller will accept a
3609      *      return of an inversion list instead of a swash hash if this routine
3610      *      thinks that would result in faster execution of swash_fetch() later
3611      *      on. (I)
3612      *
3613      * Thus there are three possible inputs to find the swash: <name>,
3614      * <listsv>, and <invlist>.  At least one must be specified.  The result
3615      * will be the union of the specified ones, although <listsv>'s various
3616      * actions can intersect, etc. what <name> gives.  To avoid going out to
3617      * disk at all, <invlist> should specify completely what the swash should
3618      * have, and <listsv> should be &PL_sv_undef and <name> should be "".
3619      *
3620      * <invlist> is only valid for binary properties */
3621
3622     PMOP *old_PL_curpm= PL_curpm; /* save away the old PL_curpm */
3623
3624     SV* retval = &PL_sv_undef;
3625     HV* swash_hv = NULL;
3626     const int invlist_swash_boundary =
3627         (flags_p && *flags_p & _CORE_SWASH_INIT_ACCEPT_INVLIST)
3628         ? 512    /* Based on some benchmarking, but not extensive, see commit
3629                     message */
3630         : -1;   /* Never return just an inversion list */
3631
3632     assert(listsv != &PL_sv_undef || strNE(name, "") || invlist);
3633     assert(! invlist || minbits == 1);
3634
3635     PL_curpm= NULL; /* reset PL_curpm so that we dont get confused between the regex
3636                        that triggered the swash init and the swash init perl logic itself.
3637                        See perl #122747 */
3638
3639     /* If data was passed in to go out to utf8_heavy to find the swash of, do
3640      * so */
3641     if (listsv != &PL_sv_undef || strNE(name, "")) {
3642         dSP;
3643         const size_t pkg_len = strlen(pkg);
3644         const size_t name_len = strlen(name);
3645         HV * const stash = gv_stashpvn(pkg, pkg_len, 0);
3646         SV* errsv_save;
3647         GV *method;
3648
3649         PERL_ARGS_ASSERT__CORE_SWASH_INIT;
3650
3651         PUSHSTACKi(PERLSI_MAGIC);
3652         ENTER;
3653         SAVEHINTS();
3654         save_re_context();
3655         /* We might get here via a subroutine signature which uses a utf8
3656          * parameter name, at which point PL_subname will have been set
3657          * but not yet used. */
3658         save_item(PL_subname);
3659         if (PL_parser && PL_parser->error_count)
3660             SAVEI8(PL_parser->error_count), PL_parser->error_count = 0;
3661         method = gv_fetchmeth(stash, "SWASHNEW", 8, -1);
3662         if (!method) {  /* demand load UTF-8 */
3663             ENTER;
3664             if ((errsv_save = GvSV(PL_errgv))) SAVEFREESV(errsv_save);
3665             GvSV(PL_errgv) = NULL;
3666 #ifndef NO_TAINT_SUPPORT
3667             /* It is assumed that callers of this routine are not passing in
3668              * any user derived data.  */
3669             /* Need to do this after save_re_context() as it will set
3670              * PL_tainted to 1 while saving $1 etc (see the code after getrx:
3671              * in Perl_magic_get).  Even line to create errsv_save can turn on
3672              * PL_tainted.  */
3673             SAVEBOOL(TAINT_get);
3674             TAINT_NOT;
3675 #endif
3676             Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpvn(pkg,pkg_len),
3677                              NULL);
3678             {
3679                 /* Not ERRSV, as there is no need to vivify a scalar we are
3680                    about to discard. */
3681                 SV * const errsv = GvSV(PL_errgv);
3682                 if (!SvTRUE(errsv)) {
3683                     GvSV(PL_errgv) = SvREFCNT_inc_simple(errsv_save);
3684                     SvREFCNT_dec(errsv);
3685                 }
3686             }
3687             LEAVE;
3688         }
3689         SPAGAIN;
3690         PUSHMARK(SP);
3691         EXTEND(SP,5);
3692         mPUSHp(pkg, pkg_len);
3693         mPUSHp(name, name_len);
3694         PUSHs(listsv);
3695         mPUSHi(minbits);
3696         mPUSHi(none);
3697         PUTBACK;
3698         if ((errsv_save = GvSV(PL_errgv))) SAVEFREESV(errsv_save);
3699         GvSV(PL_errgv) = NULL;
3700         /* If we already have a pointer to the method, no need to use
3701          * call_method() to repeat the lookup.  */
3702         if (method
3703             ? call_sv(MUTABLE_SV(method), G_SCALAR)
3704             : call_sv(newSVpvs_flags("SWASHNEW", SVs_TEMP), G_SCALAR | G_METHOD))
3705         {
3706             retval = *PL_stack_sp--;
3707             SvREFCNT_inc(retval);
3708         }
3709         {
3710             /* Not ERRSV.  See above. */
3711             SV * const errsv = GvSV(PL_errgv);
3712             if (!SvTRUE(errsv)) {
3713                 GvSV(PL_errgv) = SvREFCNT_inc_simple(errsv_save);
3714                 SvREFCNT_dec(errsv);
3715             }
3716         }
3717         LEAVE;
3718         POPSTACK;
3719         if (IN_PERL_COMPILETIME) {
3720             CopHINTS_set(PL_curcop, PL_hints);
3721         }
3722         if (!SvROK(retval) || SvTYPE(SvRV(retval)) != SVt_PVHV) {
3723             if (SvPOK(retval)) {
3724
3725                 /* If caller wants to handle missing properties, let them */
3726                 if (flags_p && *flags_p & _CORE_SWASH_INIT_RETURN_IF_UNDEF) {
3727                     CORE_SWASH_INIT_RETURN(NULL);
3728                 }
3729                 Perl_croak(aTHX_
3730                            "Can't find Unicode property definition \"%" SVf "\"",
3731                            SVfARG(retval));
3732                 NOT_REACHED; /* NOTREACHED */
3733             }
3734         }
3735     } /* End of calling the module to find the swash */
3736
3737     /* If this operation fetched a swash, and we will need it later, get it */
3738     if (retval != &PL_sv_undef
3739         && (minbits == 1 || (flags_p
3740                             && ! (*flags_p
3741                                   & _CORE_SWASH_INIT_USER_DEFINED_PROPERTY))))
3742     {
3743         swash_hv = MUTABLE_HV(SvRV(retval));
3744
3745         /* If we don't already know that there is a user-defined component to
3746          * this swash, and the user has indicated they wish to know if there is
3747          * one (by passing <flags_p>), find out */
3748         if (flags_p && ! (*flags_p & _CORE_SWASH_INIT_USER_DEFINED_PROPERTY)) {
3749             SV** user_defined = hv_fetchs(swash_hv, "USER_DEFINED", FALSE);
3750             if (user_defined && SvUV(*user_defined)) {
3751                 *flags_p |= _CORE_SWASH_INIT_USER_DEFINED_PROPERTY;
3752             }
3753         }
3754     }
3755
3756     /* Make sure there is an inversion list for binary properties */
3757     if (minbits == 1) {
3758         SV** swash_invlistsvp = NULL;
3759         SV* swash_invlist = NULL;
3760         bool invlist_in_swash_is_valid = FALSE;
3761         bool swash_invlist_unclaimed = FALSE; /* whether swash_invlist has
3762                                             an unclaimed reference count */
3763
3764         /* If this operation fetched a swash, get its already existing
3765          * inversion list, or create one for it */
3766
3767         if (swash_hv) {
3768             swash_invlistsvp = hv_fetchs(swash_hv, "V", FALSE);
3769             if (swash_invlistsvp) {
3770                 swash_invlist = *swash_invlistsvp;
3771                 invlist_in_swash_is_valid = TRUE;
3772             }
3773             else {
3774                 swash_invlist = _swash_to_invlist(retval);
3775                 swash_invlist_unclaimed = TRUE;
3776             }
3777         }
3778
3779         /* If an inversion list was passed in, have to include it */
3780         if (invlist) {
3781
3782             /* Any fetched swash will by now have an inversion list in it;
3783              * otherwise <swash_invlist>  will be NULL, indicating that we
3784              * didn't fetch a swash */
3785             if (swash_invlist) {
3786
3787                 /* Add the passed-in inversion list, which invalidates the one
3788                  * already stored in the swash */
3789                 invlist_in_swash_is_valid = FALSE;
3790                 SvREADONLY_off(swash_invlist);  /* Turned on again below */
3791                 _invlist_union(invlist, swash_invlist, &swash_invlist);
3792             }
3793             else {
3794
3795                 /* Here, there is no swash already.  Set up a minimal one, if
3796                  * we are going to return a swash */
3797                 if ((int) _invlist_len(invlist) > invlist_swash_boundary) {
3798                     swash_hv = newHV();
3799                     retval = newRV_noinc(MUTABLE_SV(swash_hv));
3800                 }
3801                 swash_invlist = invlist;
3802             }
3803         }
3804
3805         /* Here, we have computed the union of all the passed-in data.  It may
3806          * be that there was an inversion list in the swash which didn't get
3807          * touched; otherwise save the computed one */
3808         if (! invlist_in_swash_is_valid
3809             && (int) _invlist_len(swash_invlist) > invlist_swash_boundary)
3810         {
3811             if (! hv_stores(MUTABLE_HV(SvRV(retval)), "V", swash_invlist))
3812             {
3813                 Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
3814             }
3815             /* We just stole a reference count. */
3816             if (swash_invlist_unclaimed) swash_invlist_unclaimed = FALSE;
3817             else SvREFCNT_inc_simple_void_NN(swash_invlist);
3818         }
3819
3820         /* The result is immutable.  Forbid attempts to change it. */
3821         SvREADONLY_on(swash_invlist);
3822
3823         /* Use the inversion list stand-alone if small enough */
3824         if ((int) _invlist_len(swash_invlist) <= invlist_swash_boundary) {
3825             SvREFCNT_dec(retval);
3826             if (!swash_invlist_unclaimed)
3827                 SvREFCNT_inc_simple_void_NN(swash_invlist);
3828             retval = newRV_noinc(swash_invlist);
3829         }
3830     }
3831
3832     CORE_SWASH_INIT_RETURN(retval);
3833 #undef CORE_SWASH_INIT_RETURN
3834 }
3835
3836
3837 /* This API is wrong for special case conversions since we may need to
3838  * return several Unicode characters for a single Unicode character
3839  * (see lib/unicore/SpecCase.txt) The SWASHGET in lib/utf8_heavy.pl is
3840  * the lower-level routine, and it is similarly broken for returning
3841  * multiple values.  --jhi
3842  * For those, you should use S__to_utf8_case() instead */
3843 /* Now SWASHGET is recasted into S_swatch_get in this file. */
3844
3845 /* Note:
3846  * Returns the value of property/mapping C<swash> for the first character
3847  * of the string C<ptr>. If C<do_utf8> is true, the string C<ptr> is
3848  * assumed to be in well-formed UTF-8. If C<do_utf8> is false, the string C<ptr>
3849  * is assumed to be in native 8-bit encoding. Caches the swatch in C<swash>.
3850  *
3851  * A "swash" is a hash which contains initially the keys/values set up by
3852  * SWASHNEW.  The purpose is to be able to completely represent a Unicode
3853  * property for all possible code points.  Things are stored in a compact form
3854  * (see utf8_heavy.pl) so that calculation is required to find the actual
3855  * property value for a given code point.  As code points are looked up, new
3856  * key/value pairs are added to the hash, so that the calculation doesn't have
3857  * to ever be re-done.  Further, each calculation is done, not just for the
3858  * desired one, but for a whole block of code points adjacent to that one.
3859  * For binary properties on ASCII machines, the block is usually for 64 code
3860  * points, starting with a code point evenly divisible by 64.  Thus if the
3861  * property value for code point 257 is requested, the code goes out and
3862  * calculates the property values for all 64 code points between 256 and 319,
3863  * and stores these as a single 64-bit long bit vector, called a "swatch",
3864  * under the key for code point 256.  The key is the UTF-8 encoding for code
3865  * point 256, minus the final byte.  Thus, if the length of the UTF-8 encoding
3866  * for a code point is 13 bytes, the key will be 12 bytes long.  If the value
3867  * for code point 258 is then requested, this code realizes that it would be
3868  * stored under the key for 256, and would find that value and extract the
3869  * relevant bit, offset from 256.
3870  *
3871  * Non-binary properties are stored in as many bits as necessary to represent
3872  * their values (32 currently, though the code is more general than that), not
3873  * as single bits, but the principle is the same: the value for each key is a
3874  * vector that encompasses the property values for all code points whose UTF-8
3875  * representations are represented by the key.  That is, for all code points
3876  * whose UTF-8 representations are length N bytes, and the key is the first N-1
3877  * bytes of that.
3878  */
3879 UV
3880 Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8)
3881 {
3882     HV *const hv = MUTABLE_HV(SvRV(swash));
3883     U32 klen;
3884     U32 off;
3885     STRLEN slen = 0;
3886     STRLEN needents;
3887     const U8 *tmps = NULL;
3888     SV *swatch;
3889     const U8 c = *ptr;
3890
3891     PERL_ARGS_ASSERT_SWASH_FETCH;
3892
3893     /* If it really isn't a hash, it isn't really swash; must be an inversion
3894      * list */
3895     if (SvTYPE(hv) != SVt_PVHV) {
3896         return _invlist_contains_cp((SV*)hv,
3897                                     (do_utf8)
3898                                      ? valid_utf8_to_uvchr(ptr, NULL)
3899                                      : c);
3900     }
3901
3902     /* We store the values in a "swatch" which is a vec() value in a swash
3903      * hash.  Code points 0-255 are a single vec() stored with key length
3904      * (klen) 0.  All other code points have a UTF-8 representation
3905      * 0xAA..0xYY,0xZZ.  A vec() is constructed containing all of them which
3906      * share 0xAA..0xYY, which is the key in the hash to that vec.  So the key
3907      * length for them is the length of the encoded char - 1.  ptr[klen] is the
3908      * final byte in the sequence representing the character */
3909     if (!do_utf8 || UTF8_IS_INVARIANT(c)) {
3910         klen = 0;
3911         needents = 256;
3912         off = c;
3913     }
3914     else if (UTF8_IS_DOWNGRADEABLE_START(c)) {
3915         klen = 0;
3916         needents = 256;
3917         off = EIGHT_BIT_UTF8_TO_NATIVE(c, *(ptr + 1));
3918     }
3919     else {
3920         klen = UTF8SKIP(ptr) - 1;
3921
3922         /* Each vec() stores 2**UTF_ACCUMULATION_SHIFT values.  The offset into
3923          * the vec is the final byte in the sequence.  (In EBCDIC this is
3924          * converted to I8 to get consecutive values.)  To help you visualize
3925          * all this:
3926          *                       Straight 1047   After final byte
3927          *             UTF-8      UTF-EBCDIC     I8 transform
3928          *  U+0400:  \xD0\x80    \xB8\x41\x41    \xB8\x41\xA0
3929          *  U+0401:  \xD0\x81    \xB8\x41\x42    \xB8\x41\xA1
3930          *    ...
3931          *  U+0409:  \xD0\x89    \xB8\x41\x4A    \xB8\x41\xA9
3932          *  U+040A:  \xD0\x8A    \xB8\x41\x51    \xB8\x41\xAA
3933          *    ...
3934          *  U+0412:  \xD0\x92    \xB8\x41\x59    \xB8\x41\xB2
3935          *  U+0413:  \xD0\x93    \xB8\x41\x62    \xB8\x41\xB3
3936          *    ...
3937          *  U+041B:  \xD0\x9B    \xB8\x41\x6A    \xB8\x41\xBB
3938          *  U+041C:  \xD0\x9C    \xB8\x41\x70    \xB8\x41\xBC
3939          *    ...
3940          *  U+041F:  \xD0\x9F    \xB8\x41\x73    \xB8\x41\xBF
3941          *  U+0420:  \xD0\xA0    \xB8\x42\x41    \xB8\x42\x41
3942          *
3943          * (There are no discontinuities in the elided (...) entries.)
3944          * The UTF-8 key for these 33 code points is '\xD0' (which also is the
3945          * key for the next 31, up through U+043F, whose UTF-8 final byte is
3946          * \xBF).  Thus in UTF-8, each key is for a vec() for 64 code points.
3947          * The final UTF-8 byte, which ranges between \x80 and \xBF, is an
3948          * index into the vec() swatch (after subtracting 0x80, which we
3949          * actually do with an '&').
3950          * In UTF-EBCDIC, each key is for a 32 code point vec().  The first 32
3951          * code points above have key '\xB8\x41'. The final UTF-EBCDIC byte has
3952          * dicontinuities which go away by transforming it into I8, and we
3953          * effectively subtract 0xA0 to get the index. */
3954         needents = (1 << UTF_ACCUMULATION_SHIFT);
3955         off      = NATIVE_UTF8_TO_I8(ptr[klen]) & UTF_CONTINUATION_MASK;
3956     }
3957
3958     /*
3959      * This single-entry cache saves about 1/3 of the UTF-8 overhead in test
3960      * suite.  (That is, only 7-8% overall over just a hash cache.  Still,
3961      * it's nothing to sniff at.)  Pity we usually come through at least
3962      * two function calls to get here...
3963      *
3964      * NB: this code assumes that swatches are never modified, once generated!
3965      */
3966
3967     if (hv   == PL_last_swash_hv &&
3968         klen == PL_last_swash_klen &&
3969         (!klen || memEQ((char *)ptr, (char *)PL_last_swash_key, klen)) )
3970     {
3971         tmps = PL_last_swash_tmps;
3972         slen = PL_last_swash_slen;
3973     }
3974     else {
3975         /* Try our second-level swatch cache, kept in a hash. */
3976         SV** svp = hv_fetch(hv, (const char*)ptr, klen, FALSE);
3977
3978         /* If not cached, generate it via swatch_get */
3979         if (!svp || !SvPOK(*svp)
3980                  || !(tmps = (const U8*)SvPV_const(*svp, slen)))
3981         {
3982             if (klen) {
3983                 const UV code_point = valid_utf8_to_uvchr(ptr, NULL);
3984                 swatch = swatch_get(swash,
3985                                     code_point & ~((UV)needents - 1),
3986                                     needents);
3987             }
3988             else {  /* For the first 256 code points, the swatch has a key of
3989                        length 0 */
3990                 swatch = swatch_get(swash, 0, needents);
3991             }
3992
3993             if (IN_PERL_COMPILETIME)
3994                 CopHINTS_set(PL_curcop, PL_hints);
3995
3996             svp = hv_store(hv, (const char *)ptr, klen, swatch, 0);
3997
3998             if (!svp || !(tmps = (U8*)SvPV(*svp, slen))
3999                      || (slen << 3) < needents)
4000                 Perl_croak(aTHX_ "panic: swash_fetch got improper swatch, "
4001                            "svp=%p, tmps=%p, slen=%" UVuf ", needents=%" UVuf,
4002                            svp, tmps, (UV)slen, (UV)needents);
4003         }
4004
4005         PL_last_swash_hv = hv;
4006         assert(klen <= sizeof(PL_last_swash_key));
4007         PL_last_swash_klen = (U8)klen;
4008         /* FIXME change interpvar.h?  */
4009         PL_last_swash_tmps = (U8 *) tmps;
4010         PL_last_swash_slen = slen;
4011         if (klen)
4012             Copy(ptr, PL_last_swash_key, klen, U8);
4013     }
4014
4015     switch ((int)((slen << 3) / needents)) {
4016     case 1:
4017         return ((UV) tmps[off >> 3] & (1 << (off & 7))) != 0;
4018     case 8:
4019         return ((UV) tmps[off]);
4020     case 16:
4021         off <<= 1;
4022         return
4023             ((UV) tmps[off    ] << 8) +
4024             ((UV) tmps[off + 1]);
4025     case 32:
4026         off <<= 2;
4027         return
4028             ((UV) tmps[off    ] << 24) +
4029             ((UV) tmps[off + 1] << 16) +
4030             ((UV) tmps[off + 2] <<  8) +
4031             ((UV) tmps[off + 3]);
4032     }
4033     Perl_croak(aTHX_ "panic: swash_fetch got swatch of unexpected bit width, "
4034                "slen=%" UVuf ", needents=%" UVuf, (UV)slen, (UV)needents);
4035     NORETURN_FUNCTION_END;
4036 }
4037
4038 /* Read a single line of the main body of the swash input text.  These are of
4039  * the form:
4040  * 0053 0056    0073
4041  * where each number is hex.  The first two numbers form the minimum and
4042  * maximum of a range, and the third is the value associated with the range.
4043  * Not all swashes should have a third number
4044  *
4045  * On input: l    points to the beginning of the line to be examined; it points
4046  *                to somewhere in the string of the whole input text, and is
4047  *                terminated by a \n or the null string terminator.
4048  *           lend   points to the null terminator of that string
4049  *           wants_value    is non-zero if the swash expects a third number
4050  *           typestr is the name of the swash's mapping, like 'ToLower'
4051  * On output: *min, *max, and *val are set to the values read from the line.
4052  *            returns a pointer just beyond the line examined.  If there was no
4053  *            valid min number on the line, returns lend+1
4054  */
4055
4056 STATIC U8*
4057 S_swash_scan_list_line(pTHX_ U8* l, U8* const lend, UV* min, UV* max, UV* val,
4058                              const bool wants_value, const U8* const typestr)
4059 {
4060     const int  typeto  = typestr[0] == 'T' && typestr[1] == 'o';
4061     STRLEN numlen;          /* Length of the number */
4062     I32 flags = PERL_SCAN_SILENT_ILLDIGIT
4063                 | PERL_SCAN_DISALLOW_PREFIX
4064                 | PERL_SCAN_SILENT_NON_PORTABLE;
4065
4066     /* nl points to the next \n in the scan */
4067     U8* const nl = (U8*)memchr(l, '\n', lend - l);
4068
4069     PERL_ARGS_ASSERT_SWASH_SCAN_LIST_LINE;
4070
4071     /* Get the first number on the line: the range minimum */
4072     numlen = lend - l;
4073     *min = grok_hex((char *)l, &numlen, &flags, NULL);
4074     *max = *min;    /* So can never return without setting max */
4075     if (numlen)     /* If found a hex number, position past it */
4076         l += numlen;
4077     else if (nl) {          /* Else, go handle next line, if any */
4078         return nl + 1;  /* 1 is length of "\n" */
4079     }
4080     else {              /* Else, no next line */
4081         return lend + 1;        /* to LIST's end at which \n is not found */
4082     }
4083
4084     /* The max range value follows, separated by a BLANK */
4085     if (isBLANK(*l)) {
4086         ++l;
4087         flags = PERL_SCAN_SILENT_ILLDIGIT
4088                 | PERL_SCAN_DISALLOW_PREFIX
4089                 | PERL_SCAN_SILENT_NON_PORTABLE;
4090         numlen = lend - l;
4091         *max = grok_hex((char *)l, &numlen, &flags, NULL);
4092         if (numlen)
4093             l += numlen;
4094         else    /* If no value here, it is a single element range */
4095             *max = *min;
4096
4097         /* Non-binary tables have a third entry: what the first element of the
4098          * range maps to.  The map for those currently read here is in hex */
4099         if (wants_value) {
4100             if (isBLANK(*l)) {
4101                 ++l;
4102                 flags = PERL_SCAN_SILENT_ILLDIGIT
4103                     | PERL_SCAN_DISALLOW_PREFIX
4104                     | PERL_SCAN_SILENT_NON_PORTABLE;
4105                 numlen = lend - l;
4106                 *val = grok_hex((char *)l, &numlen, &flags, NULL);
4107                 if (numlen)
4108                     l += numlen;
4109                 else
4110                     *val = 0;
4111             }
4112             else {
4113                 *val = 0;
4114                 if (typeto) {
4115                     /* diag_listed_as: To%s: illegal mapping '%s' */
4116                     Perl_croak(aTHX_ "%s: illegal mapping '%s'",
4117                                      typestr, l);
4118                 }
4119             }
4120         }
4121         else
4122             *val = 0; /* bits == 1, then any val should be ignored */
4123     }
4124     else { /* Nothing following range min, should be single element with no
4125               mapping expected */
4126         if (wants_value) {
4127             *val = 0;
4128             if (typeto) {
4129                 /* diag_listed_as: To%s: illegal mapping '%s' */
4130                 Perl_croak(aTHX_ "%s: illegal mapping '%s'", typestr, l);
4131             }
4132         }
4133         else
4134             *val = 0; /* bits == 1, then val should be ignored */
4135     }
4136
4137     /* Position to next line if any, or EOF */
4138     if (nl)
4139         l = nl + 1;
4140     else
4141         l = lend;
4142
4143     return l;
4144 }
4145
4146 /* Note:
4147  * Returns a swatch (a bit vector string) for a code point sequence
4148  * that starts from the value C<start> and comprises the number C<span>.
4149  * A C<swash> must be an object created by SWASHNEW (see lib/utf8_heavy.pl).
4150  * Should be used via swash_fetch, which will cache the swatch in C<swash>.
4151  */
4152 STATIC SV*
4153 S_swatch_get(pTHX_ SV* swash, UV start, UV span)
4154 {
4155     SV *swatch;
4156     U8 *l, *lend, *x, *xend, *s, *send;
4157     STRLEN lcur, xcur, scur;
4158     HV *const hv = MUTABLE_HV(SvRV(swash));
4159     SV** const invlistsvp = hv_fetchs(hv, "V", FALSE);
4160
4161     SV** listsvp = NULL; /* The string containing the main body of the table */
4162     SV** extssvp = NULL;
4163     SV** invert_it_svp = NULL;
4164     U8* typestr = NULL;
4165     STRLEN bits;
4166     STRLEN octets; /* if bits == 1, then octets == 0 */
4167     UV  none;
4168     UV  end = start + span;
4169
4170     if (invlistsvp == NULL) {
4171         SV** const bitssvp = hv_fetchs(hv, "BITS", FALSE);
4172         SV** const nonesvp = hv_fetchs(hv, "NONE", FALSE);
4173         SV** const typesvp = hv_fetchs(hv, "TYPE", FALSE);
4174         extssvp = hv_fetchs(hv, "EXTRAS", FALSE);
4175         listsvp = hv_fetchs(hv, "LIST", FALSE);
4176         invert_it_svp = hv_fetchs(hv, "INVERT_IT", FALSE);
4177
4178         bits  = SvUV(*bitssvp);
4179         none  = SvUV(*nonesvp);
4180         typestr = (U8*)SvPV_nolen(*typesvp);
4181     }
4182     else {
4183         bits = 1;
4184         none = 0;
4185     }
4186     octets = bits >> 3; /* if bits == 1, then octets == 0 */
4187
4188     PERL_ARGS_ASSERT_SWATCH_GET;
4189
4190     if (bits != 1 && bits != 8 && bits != 16 && bits != 32) {
4191         Perl_croak(aTHX_ "panic: swatch_get doesn't expect bits %" UVuf,
4192                                                  (UV)bits);
4193     }
4194
4195     /* If overflowed, use the max possible */
4196     if (end < start) {
4197         end = UV_MAX;
4198         span = end - start;
4199     }
4200
4201     /* create and initialize $swatch */
4202     scur   = octets ? (span * octets) : (span + 7) / 8;
4203     swatch = newSV(scur);
4204     SvPOK_on(swatch);
4205     s = (U8*)SvPVX(swatch);
4206     if (octets && none) {
4207         const U8* const e = s + scur;
4208         while (s < e) {
4209             if (bits == 8)
4210                 *s++ = (U8)(none & 0xff);
4211             else if (bits == 16) {
4212                 *s++ = (U8)((none >>  8) & 0xff);
4213                 *s++ = (U8)( none        & 0xff);
4214             }
4215             else if (bits == 32) {
4216                 *s++ = (U8)((none >> 24) & 0xff);
4217                 *s++ = (U8)((none >> 16) & 0xff);
4218                 *s++ = (U8)((none >>  8) & 0xff);
4219                 *s++ = (U8)( none        & 0xff);
4220             }
4221         }
4222         *s = '\0';
4223     }
4224     else {
4225         (void)memzero((U8*)s, scur + 1);
4226     }
4227     SvCUR_set(swatch, scur);
4228     s = (U8*)SvPVX(swatch);
4229
4230     if (invlistsvp) {   /* If has an inversion list set up use that */
4231         _invlist_populate_swatch(*invlistsvp, start, end, s);
4232         return swatch;
4233     }
4234
4235     /* read $swash->{LIST} */
4236     l = (U8*)SvPV(*listsvp, lcur);
4237     lend = l + lcur;
4238     while (l < lend) {
4239         UV min, max, val, upper;
4240         l = swash_scan_list_line(l, lend, &min, &max, &val,
4241                                                         cBOOL(octets), typestr);
4242         if (l > lend) {
4243             break;
4244         }
4245
4246         /* If looking for something beyond this range, go try the next one */
4247         if (max < start)
4248             continue;
4249
4250         /* <end> is generally 1 beyond where we want to set things, but at the
4251          * platform's infinity, where we can't go any higher, we want to
4252          * include the code point at <end> */
4253         upper = (max < end)
4254                 ? max
4255                 : (max != UV_MAX || end != UV_MAX)
4256                   ? end - 1
4257                   : end;
4258
4259         if (octets) {
4260             UV key;
4261             if (min < start) {
4262                 if (!none || val < none) {
4263                     val += start - min;
4264                 }
4265                 min = start;
4266             }
4267             for (key = min; key <= upper; key++) {
4268                 STRLEN offset;
4269                 /* offset must be non-negative (start <= min <= key < end) */
4270                 offset = octets * (key - start);
4271                 if (bits == 8)
4272                     s[offset] = (U8)(val & 0xff);
4273                 else if (bits == 16) {
4274                     s[offset    ] = (U8)((val >>  8) & 0xff);
4275                     s[offset + 1] = (U8)( val        & 0xff);
4276                 }
4277                 else if (bits == 32) {
4278                     s[offset    ] = (U8)((val >> 24) & 0xff);
4279                     s[offset + 1] = (U8)((val >> 16) & 0xff);
4280                     s[offset + 2] = (U8)((val >>  8) & 0xff);
4281                     s[offset + 3] = (U8)( val        & 0xff);
4282                 }
4283
4284                 if (!none || val < none)
4285                     ++val;
4286             }
4287         }
4288         else { /* bits == 1, then val should be ignored */
4289             UV key;
4290             if (min < start)
4291                 min = start;
4292
4293             for (key = min; key <= upper; key++) {
4294                 const STRLEN offset = (STRLEN)(key - start);
4295                 s[offset >> 3] |= 1 << (offset & 7);
4296             }
4297         }
4298     } /* while */
4299
4300     /* Invert if the data says it should be.  Assumes that bits == 1 */
4301     if (invert_it_svp && SvUV(*invert_it_svp)) {
4302
4303         /* Unicode properties should come with all bits above PERL_UNICODE_MAX
4304          * be 0, and their inversion should also be 0, as we don't succeed any
4305          * Unicode property matches for non-Unicode code points */
4306         if (start <= PERL_UNICODE_MAX) {
4307
4308             /* The code below assumes that we never cross the
4309              * Unicode/above-Unicode boundary in a range, as otherwise we would
4310              * have to figure out where to stop flipping the bits.  Since this
4311              * boundary is divisible by a large power of 2, and swatches comes
4312              * in small powers of 2, this should be a valid assumption */
4313             assert(start + span - 1 <= PERL_UNICODE_MAX);
4314
4315             send = s + scur;
4316             while (s < send) {
4317                 *s = ~(*s);
4318                 s++;
4319             }
4320         }
4321     }
4322
4323     /* read $swash->{EXTRAS}
4324      * This code also copied to swash_to_invlist() below */
4325     x = (U8*)SvPV(*extssvp, xcur);
4326     xend = x + xcur;
4327     while (x < xend) {
4328         STRLEN namelen;
4329         U8 *namestr;
4330         SV** othersvp;
4331         HV* otherhv;
4332         STRLEN otherbits;
4333         SV **otherbitssvp, *other;
4334         U8 *s, *o, *nl;
4335         STRLEN slen, olen;
4336
4337         const U8 opc = *x++;
4338         if (opc == '\n')
4339             continue;
4340
4341         nl = (U8*)memchr(x, '\n', xend - x);
4342
4343         if (opc != '-' && opc != '+' && opc != '!' && opc != '&') {
4344             if (nl) {
4345                 x = nl + 1; /* 1 is length of "\n" */
4346                 continue;
4347             }
4348             else {
4349                 x = xend; /* to EXTRAS' end at which \n is not found */
4350                 break;
4351             }
4352         }
4353
4354         namestr = x;
4355         if (nl) {
4356             namelen = nl - namestr;
4357             x = nl + 1;
4358         }
4359         else {
4360             namelen = xend - namestr;
4361             x = xend;
4362         }
4363
4364         othersvp = hv_fetch(hv, (char *)namestr, namelen, FALSE);
4365         otherhv = MUTABLE_HV(SvRV(*othersvp));
4366         otherbitssvp = hv_fetchs(otherhv, "BITS", FALSE);
4367         otherbits = (STRLEN)SvUV(*otherbitssvp);
4368         if (bits < otherbits)
4369             Perl_croak(aTHX_ "panic: swatch_get found swatch size mismatch, "
4370                        "bits=%" UVuf ", otherbits=%" UVuf, (UV)bits, (UV)otherbits);
4371
4372         /* The "other" swatch must be destroyed after. */
4373         other = swatch_get(*othersvp, start, span);
4374         o = (U8*)SvPV(other, olen);
4375
4376         if (!olen)
4377             Perl_croak(aTHX_ "panic: swatch_get got improper swatch");
4378
4379         s = (U8*)SvPV(swatch, slen);
4380         if (bits == 1 && otherbits == 1) {
4381             if (slen != olen)
4382                 Perl_croak(aTHX_ "panic: swatch_get found swatch length "
4383                            "mismatch, slen=%" UVuf ", olen=%" UVuf,
4384                            (UV)slen, (UV)olen);
4385
4386             switch (opc) {
4387             case '+':
4388                 while (slen--)
4389                     *s++ |= *o++;
4390                 break;
4391             case '!':
4392                 while (slen--)
4393                     *s++ |= ~*o++;
4394                 break;
4395             case '-':
4396                 while (slen--)
4397                     *s++ &= ~*o++;
4398                 break;
4399             case '&':
4400                 while (slen--)
4401                     *s++ &= *o++;
4402                 break;
4403             default:
4404                 break;
4405             }
4406         }
4407         else {
4408             STRLEN otheroctets = otherbits >> 3;
4409             STRLEN offset = 0;
4410             U8* const send = s + slen;
4411
4412             while (s < send) {
4413                 UV otherval = 0;
4414
4415                 if (otherbits == 1) {
4416                     otherval = (o[offset >> 3] >> (offset & 7)) & 1;
4417                     ++offset;
4418                 }
4419                 else {
4420                     STRLEN vlen = otheroctets;
4421                     otherval = *o++;
4422                     while (--vlen) {
4423                         otherval <<= 8;
4424                         otherval |= *o++;
4425                     }
4426                 }
4427
4428                 if (opc == '+' && otherval)
4429                     NOOP;   /* replace with otherval */
4430                 else if (opc == '!' && !otherval)
4431                     otherval = 1;
4432                 else if (opc == '-' && otherval)
4433                     otherval = 0;
4434                 else if (opc == '&' && !otherval)
4435                     otherval = 0;
4436                 else {
4437                     s += octets; /* no replacement */
4438                     continue;
4439                 }
4440
4441                 if (bits == 8)
4442                     *s++ = (U8)( otherval & 0xff);
4443                 else if (bits == 16) {
4444                     *s++ = (U8)((otherval >>  8) & 0xff);
4445                     *s++ = (U8)( otherval        & 0xff);
4446                 }
4447                 else if (bits == 32) {
4448                     *s++ = (U8)((otherval >> 24) & 0xff);
4449                     *s++ = (U8)((otherval >> 16) & 0xff);
4450                     *s++ = (U8)((otherval >>  8) & 0xff);
4451                     *s++ = (U8)( otherval        & 0xff);
4452                 }
4453             }
4454         }
4455         sv_free(other); /* through with it! */
4456     } /* while */
4457     return swatch;
4458 }
4459
4460 HV*
4461 Perl__swash_inversion_hash(pTHX_ SV* const swash)
4462 {
4463
4464    /* Subject to change or removal.  For use only in regcomp.c and regexec.c
4465     * Can't be used on a property that is subject to user override, as it
4466     * relies on the value of SPECIALS in the swash which would be set by
4467     * utf8_heavy.pl to the hash in the non-overriden file, and hence is not set
4468     * for overridden properties
4469     *
4470     * Returns a hash which is the inversion and closure of a swash mapping.
4471     * For example, consider the input lines:
4472     * 004B              006B
4473     * 004C              006C
4474     * 212A              006B
4475     *
4476     * The returned hash would have two keys, the UTF-8 for 006B and the UTF-8 for
4477     * 006C.  The value for each key is an array.  For 006C, the array would
4478     * have two elements, the UTF-8 for itself, and for 004C.  For 006B, there
4479     * would be three elements in its array, the UTF-8 for 006B, 004B and 212A.
4480     *
4481     * Note that there are no elements in the hash for 004B, 004C, 212A.  The
4482     * keys are only code points that are folded-to, so it isn't a full closure.
4483     *
4484     * Essentially, for any code point, it gives all the code points that map to
4485     * it, or the list of 'froms' for that point.
4486     *
4487     * Currently it ignores any additions or deletions from other swashes,
4488     * looking at just the main body of the swash, and if there are SPECIALS
4489     * in the swash, at that hash
4490     *
4491     * The specials hash can be extra code points, and most likely consists of
4492     * maps from single code points to multiple ones (each expressed as a string
4493     * of UTF-8 characters).   This function currently returns only 1-1 mappings.
4494     * However consider this possible input in the specials hash:
4495     * "\xEF\xAC\x85" => "\x{0073}\x{0074}",         # U+FB05 => 0073 0074
4496     * "\xEF\xAC\x86" => "\x{0073}\x{0074}",         # U+FB06 => 0073 0074
4497     *
4498     * Both FB05 and FB06 map to the same multi-char sequence, which we don't
4499     * currently handle.  But it also means that FB05 and FB06 are equivalent in
4500     * a 1-1 mapping which we should handle, and this relationship may not be in
4501     * the main table.  Therefore this function examines all the multi-char
4502     * sequences and adds the 1-1 mappings that come out of that.
4503     *
4504     * XXX This function was originally intended to be multipurpose, but its
4505     * only use is quite likely to remain for constructing the inversion of
4506     * the CaseFolding (//i) property.  If it were more general purpose for
4507     * regex patterns, it would have to do the FB05/FB06 game for simple folds,
4508     * because certain folds are prohibited under /iaa and /il.  As an example,
4509     * in Unicode 3.0.1 both U+0130 and U+0131 fold to 'i', and hence are both
4510     * equivalent under /i.  But under /iaa and /il, the folds to 'i' are
4511     * prohibited, so we would not figure out that they fold to each other.
4512     * Code could be written to automatically figure this out, similar to the
4513     * code that does this for multi-character folds, but this is the only case
4514     * where something like this is ever likely to happen, as all the single
4515     * char folds to the 0-255 range are now quite settled.  Instead there is a
4516     * little special code that is compiled only for this Unicode version.  This
4517     * is smaller and didn't require much coding time to do.  But this makes
4518     * this routine strongly tied to being used just for CaseFolding.  If ever
4519     * it should be generalized, this would have to be fixed */
4520
4521     U8 *l, *lend;
4522     STRLEN lcur;
4523     HV *const hv = MUTABLE_HV(SvRV(swash));
4524
4525     /* The string containing the main body of the table.  This will have its
4526      * assertion fail if the swash has been converted to its inversion list */
4527     SV** const listsvp = hv_fetchs(hv, "LIST", FALSE);
4528
4529     SV** const typesvp = hv_fetchs(hv, "TYPE", FALSE);
4530     SV** const bitssvp = hv_fetchs(hv, "BITS", FALSE);
4531     SV** const nonesvp = hv_fetchs(hv, "NONE", FALSE);
4532     /*SV** const extssvp = hv_fetchs(hv, "EXTRAS", FALSE);*/
4533     const U8* const typestr = (U8*)SvPV_nolen(*typesvp);
4534     const STRLEN bits  = SvUV(*bitssvp);
4535     const STRLEN octets = bits >> 3; /* if bits == 1, then octets == 0 */
4536     const UV     none  = SvUV(*nonesvp);
4537     SV **specials_p = hv_fetchs(hv, "SPECIALS", 0);
4538
4539     HV* ret = newHV();
4540
4541     PERL_ARGS_ASSERT__SWASH_INVERSION_HASH;
4542
4543     /* Must have at least 8 bits to get the mappings */
4544     if (bits != 8 && bits != 16 && bits != 32) {
4545         Perl_croak(aTHX_ "panic: swash_inversion_hash doesn't expect bits %" UVuf,
4546                                                  (UV)bits);
4547     }
4548
4549     if (specials_p) { /* It might be "special" (sometimes, but not always, a
4550                         mapping to more than one character */
4551
4552         /* Construct an inverse mapping hash for the specials */
4553         HV * const specials_hv = MUTABLE_HV(SvRV(*specials_p));
4554         HV * specials_inverse = newHV();
4555         char *char_from; /* the lhs of the map */
4556         I32 from_len;   /* its byte length */
4557         char *char_to;  /* the rhs of the map */
4558         I32 to_len;     /* its byte length */
4559         SV *sv_to;      /* and in a sv */
4560         AV* from_list;  /* list of things that map to each 'to' */
4561
4562         hv_iterinit(specials_hv);
4563
4564         /* The keys are the characters (in UTF-8) that map to the corresponding
4565          * UTF-8 string value.  Iterate through the list creating the inverse
4566          * list. */
4567         while ((sv_to = hv_iternextsv(specials_hv, &char_from, &from_len))) {
4568             SV** listp;
4569             if (! SvPOK(sv_to)) {
4570                 Perl_croak(aTHX_ "panic: value returned from hv_iternextsv() "
4571                            "unexpectedly is not a string, flags=%lu",
4572                            (unsigned long)SvFLAGS(sv_to));
4573             }
4574             /*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)));*/
4575
4576             /* Each key in the inverse list is a mapped-to value, and the key's
4577              * hash value is a list of the strings (each in UTF-8) that map to
4578              * it.  Those strings are all one character long */
4579             if ((listp = hv_fetch(specials_inverse,
4580                                     SvPVX(sv_to),
4581                                     SvCUR(sv_to), 0)))
4582             {
4583                 from_list = (AV*) *listp;
4584             }
4585             else { /* No entry yet for it: create one */
4586                 from_list = newAV();
4587                 if (! hv_store(specials_inverse,
4588                                 SvPVX(sv_to),
4589                                 SvCUR(sv_to),
4590                                 (SV*) from_list, 0))
4591                 {
4592                     Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
4593                 }
4594             }
4595
4596             /* Here have the list associated with this 'to' (perhaps newly
4597              * created and empty).  Just add to it.  Note that we ASSUME that
4598              * the input is guaranteed to not have duplications, so we don't
4599              * check for that.  Duplications just slow down execution time. */
4600             av_push(from_list, newSVpvn_utf8(char_from, from_len, TRUE));
4601         }
4602
4603         /* Here, 'specials_inverse' contains the inverse mapping.  Go through
4604          * it looking for cases like the FB05/FB06 examples above.  There would
4605          * be an entry in the hash like
4606         *       'st' => [ FB05, FB06 ]
4607         * In this example we will create two lists that get stored in the
4608         * returned hash, 'ret':
4609         *       FB05 => [ FB05, FB06 ]
4610         *       FB06 => [ FB05, FB06 ]
4611         *
4612         * Note that there is nothing to do if the array only has one element.
4613         * (In the normal 1-1 case handled below, we don't have to worry about
4614         * two lists, as everything gets tied to the single list that is
4615         * generated for the single character 'to'.  But here, we are omitting
4616         * that list, ('st' in the example), so must have multiple lists.) */
4617         while ((from_list = (AV *) hv_iternextsv(specials_inverse,
4618                                                  &char_to, &to_len)))
4619         {
4620             if (av_tindex_skip_len_mg(from_list) > 0) {
4621                 SSize_t i;
4622
4623                 /* We iterate over all combinations of i,j to place each code
4624                  * point on each list */
4625                 for (i = 0; i <= av_tindex_skip_len_mg(from_list); i++) {
4626                     SSize_t j;
4627                     AV* i_list = newAV();
4628                     SV** entryp = av_fetch(from_list, i, FALSE);
4629                     if (entryp == NULL) {
4630                         Perl_croak(aTHX_ "panic: av_fetch() unexpectedly failed");
4631                     }
4632                     if (hv_fetch(ret, SvPVX(*entryp), SvCUR(*entryp), FALSE)) {
4633                         Perl_croak(aTHX_ "panic: unexpected entry for %s", SvPVX(*entryp));
4634                     }
4635                     if (! hv_store(ret, SvPVX(*entryp), SvCUR(*entryp),
4636                                    (SV*) i_list, FALSE))
4637                     {
4638                         Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
4639                     }
4640
4641                     /* For DEBUG_U: UV u = valid_utf8_to_uvchr((U8*) SvPVX(*entryp), 0);*/
4642                     for (j = 0; j <= av_tindex_skip_len_mg(from_list); j++) {
4643                         entryp = av_fetch(from_list, j, FALSE);
4644                         if (entryp == NULL) {
4645                             Perl_croak(aTHX_ "panic: av_fetch() unexpectedly failed");
4646                         }
4647
4648                         /* When i==j this adds itself to the list */
4649                         av_push(i_list, newSVuv(utf8_to_uvchr_buf(
4650                                         (U8*) SvPVX(*entryp),
4651                                         (U8*) SvPVX(*entryp) + SvCUR(*entryp),
4652                                         0)));
4653                         /*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));*/
4654                     }
4655                 }
4656             }
4657         }
4658         SvREFCNT_dec(specials_inverse); /* done with it */
4659     } /* End of specials */
4660
4661     /* read $swash->{LIST} */
4662
4663 #if    UNICODE_MAJOR_VERSION   == 3         \
4664     && UNICODE_DOT_VERSION     == 0         \
4665     && UNICODE_DOT_DOT_VERSION == 1
4666
4667     /* For this version only U+130 and U+131 are equivalent under qr//i.  Add a
4668      * rule so that things work under /iaa and /il */
4669
4670     SV * mod_listsv = sv_mortalcopy(*listsvp);
4671     sv_catpv(mod_listsv, "130\t130\t131\n");
4672     l = (U8*)SvPV(mod_listsv, lcur);
4673
4674 #else
4675
4676     l = (U8*)SvPV(*listsvp, lcur);
4677
4678 #endif
4679
4680     lend = l + lcur;
4681
4682     /* Go through each input line */
4683     while (l < lend) {
4684         UV min, max, val;
4685         UV inverse;
4686         l = swash_scan_list_line(l, lend, &min, &max, &val,
4687                                                      cBOOL(octets), typestr);
4688         if (l > lend) {
4689             break;
4690         }
4691
4692         /* Each element in the range is to be inverted */
4693         for (inverse = min; inverse <= max; inverse++) {
4694             AV* list;
4695             SV** listp;
4696             IV i;
4697             bool found_key = FALSE;
4698             bool found_inverse = FALSE;
4699
4700             /* The key is the inverse mapping */
4701             char key[UTF8_MAXBYTES+1];
4702             char* key_end = (char *) uvchr_to_utf8((U8*) key, val);
4703             STRLEN key_len = key_end - key;
4704
4705             /* Get the list for the map */
4706             if ((listp = hv_fetch(ret, key, key_len, FALSE))) {
4707                 list = (AV*) *listp;
4708             }
4709             else { /* No entry yet for it: create one */
4710                 list = newAV();
4711                 if (! hv_store(ret, key, key_len, (SV*) list, FALSE)) {
4712                     Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
4713                 }
4714             }
4715
4716             /* Look through list to see if this inverse mapping already is
4717              * listed, or if there is a mapping to itself already */
4718             for (i = 0; i <= av_tindex_skip_len_mg(list); i++) {
4719                 SV** entryp = av_fetch(list, i, FALSE);
4720                 SV* entry;
4721                 UV uv;
4722                 if (entryp == NULL) {
4723                     Perl_croak(aTHX_ "panic: av_fetch() unexpectedly failed");
4724                 }
4725                 entry = *entryp;
4726                 uv = SvUV(entry);
4727                 /*DEBUG_U(PerlIO_printf(Perl_debug_log, "list for %" UVXf " contains %" UVXf "\n", val, uv));*/
4728                 if (uv == val) {
4729                     found_key = TRUE;
4730                 }
4731                 if (uv == inverse) {
4732                     found_inverse = TRUE;
4733                 }
4734
4735                 /* No need to continue searching if found everything we are
4736                  * looking for */
4737                 if (found_key && found_inverse) {
4738                     break;
4739                 }
4740             }
4741
4742             /* Make sure there is a mapping to itself on the list */
4743             if (! found_key) {
4744                 av_push(list, newSVuv(val));
4745                 /*DEBUG_U(PerlIO_printf(Perl_debug_log, "%s: %d: Adding %" UVXf " to list for %" UVXf "\n", __FILE__, __LINE__, val, val));*/
4746             }
4747
4748
4749             /* Simply add the value to the list */
4750             if (! found_inverse) {
4751                 av_push(list, newSVuv(inverse));
4752                 /*DEBUG_U(PerlIO_printf(Perl_debug_log, "%s: %d: Adding %" UVXf " to list for %" UVXf "\n", __FILE__, __LINE__, inverse, val));*/
4753             }
4754
4755             /* swatch_get() increments the value of val for each element in the
4756              * range.  That makes more compact tables possible.  You can
4757              * express the capitalization, for example, of all consecutive
4758              * letters with a single line: 0061\t007A\t0041 This maps 0061 to
4759              * 0041, 0062 to 0042, etc.  I (khw) have never understood 'none',
4760              * and it's not documented; it appears to be used only in
4761              * implementing tr//; I copied the semantics from swatch_get(), just
4762              * in case */
4763             if (!none || val < none) {
4764                 ++val;
4765             }
4766         }
4767     }
4768
4769     return ret;
4770 }
4771
4772 SV*
4773 Perl__swash_to_invlist(pTHX_ SV* const swash)
4774 {
4775
4776    /* Subject to change or removal.  For use only in one place in regcomp.c.
4777     * Ownership is given to one reference count in the returned SV* */
4778
4779     U8 *l, *lend;
4780     char *loc;
4781     STRLEN lcur;
4782     HV *const hv = MUTABLE_HV(SvRV(swash));
4783     UV elements = 0;    /* Number of elements in the inversion list */
4784     U8 empty[] = "";
4785     SV** listsvp;
4786     SV** typesvp;
4787     SV** bitssvp;
4788     SV** extssvp;
4789     SV** invert_it_svp;
4790
4791     U8* typestr;
4792     STRLEN bits;
4793     STRLEN octets; /* if bits == 1, then octets == 0 */
4794     U8 *x, *xend;
4795     STRLEN xcur;
4796
4797     SV* invlist;
4798
4799     PERL_ARGS_ASSERT__SWASH_TO_INVLIST;
4800
4801     /* If not a hash, it must be the swash's inversion list instead */
4802     if (SvTYPE(hv) != SVt_PVHV) {
4803         return SvREFCNT_inc_simple_NN((SV*) hv);
4804     }
4805
4806     /* The string containing the main body of the table */
4807     listsvp = hv_fetchs(hv, "LIST", FALSE);
4808     typesvp = hv_fetchs(hv, "TYPE", FALSE);
4809     bitssvp = hv_fetchs(hv, "BITS", FALSE);
4810     extssvp = hv_fetchs(hv, "EXTRAS", FALSE);
4811     invert_it_svp = hv_fetchs(hv, "INVERT_IT", FALSE);
4812
4813     typestr = (U8*)SvPV_nolen(*typesvp);
4814     bits  = SvUV(*bitssvp);
4815     octets = bits >> 3; /* if bits == 1, then octets == 0 */
4816
4817     /* read $swash->{LIST} */
4818     if (SvPOK(*listsvp)) {
4819         l = (U8*)SvPV(*listsvp, lcur);
4820     }
4821     else {
4822         /* LIST legitimately doesn't contain a string during compilation phases
4823          * of Perl itself, before the Unicode tables are generated.  In this
4824          * case, just fake things up by creating an empty list */
4825         l = empty;
4826         lcur = 0;
4827     }
4828     loc = (char *) l;
4829     lend = l + lcur;
4830
4831     if (*l == 'V') {    /*  Inversion list format */
4832         const char *after_atou = (char *) lend;
4833         UV element0;
4834         UV* other_elements_ptr;
4835
4836         /* The first number is a count of the rest */
4837         l++;
4838         if (!grok_atoUV((const char *)l, &elements, &after_atou)) {
4839             Perl_croak(aTHX_ "panic: Expecting a valid count of elements at start of inversion list");
4840         }
4841         if (elements == 0) {
4842             invlist = _new_invlist(0);
4843         }
4844         else {
4845             l = (U8 *) after_atou;
4846
4847             /* Get the 0th element, which is needed to setup the inversion list */
4848             while (isSPACE(*l)) l++;
4849             if (!grok_atoUV((const char *)l, &element0, &after_atou)) {
4850                 Perl_croak(aTHX_ "panic: Expecting a valid 0th element for inversion list");
4851             }
4852             l = (U8 *) after_atou;
4853             invlist = _setup_canned_invlist(elements, element0, &other_elements_ptr);
4854             elements--;
4855
4856             /* Then just populate the rest of the input */
4857             while (elements-- > 0) {
4858                 if (l > lend) {
4859                     Perl_croak(aTHX_ "panic: Expecting %" UVuf " more elements than available", elements);
4860                 }
4861                 while (isSPACE(*l)) l++;
4862                 if (!grok_atoUV((const char *)l, other_elements_ptr++, &after_atou)) {
4863                     Perl_croak(aTHX_ "panic: Expecting a valid element in inversion list");
4864                 }
4865                 l = (U8 *) after_atou;
4866             }
4867         }
4868     }
4869     else {
4870
4871         /* Scan the input to count the number of lines to preallocate array
4872          * size based on worst possible case, which is each line in the input
4873          * creates 2 elements in the inversion list: 1) the beginning of a
4874          * range in the list; 2) the beginning of a range not in the list.  */
4875         while ((loc = (strchr(loc, '\n'))) != NULL) {
4876             elements += 2;
4877             loc++;
4878         }
4879
4880         /* If the ending is somehow corrupt and isn't a new line, add another
4881          * element for the final range that isn't in the inversion list */
4882         if (! (*lend == '\n'
4883             || (*lend == '\0' && (lcur == 0 || *(lend - 1) == '\n'))))
4884         {
4885             elements++;
4886         }
4887
4888         invlist = _new_invlist(elements);
4889
4890         /* Now go through the input again, adding each range to the list */
4891         while (l < lend) {
4892             UV start, end;
4893             UV val;             /* Not used by this function */
4894
4895             l = swash_scan_list_line(l, lend, &start, &end, &val,
4896                                                         cBOOL(octets), typestr);
4897
4898             if (l > lend) {
4899                 break;
4900             }
4901
4902             invlist = _add_range_to_invlist(invlist, start, end);
4903         }
4904     }
4905
4906     /* Invert if the data says it should be */
4907     if (invert_it_svp && SvUV(*invert_it_svp)) {
4908         _invlist_invert(invlist);
4909     }
4910
4911     /* This code is copied from swatch_get()
4912      * read $swash->{EXTRAS} */
4913     x = (U8*)SvPV(*extssvp, xcur);
4914     xend = x + xcur;
4915     while (x < xend) {
4916         STRLEN namelen;
4917         U8 *namestr;
4918         SV** othersvp;
4919         HV* otherhv;
4920         STRLEN otherbits;
4921         SV **otherbitssvp, *other;
4922         U8 *nl;
4923
4924         const U8 opc = *x++;
4925         if (opc == '\n')
4926             continue;
4927
4928         nl = (U8*)memchr(x, '\n', xend - x);
4929
4930         if (opc != '-' && opc != '+' && opc != '!' && opc != '&') {
4931             if (nl) {
4932                 x = nl + 1; /* 1 is length of "\n" */
4933                 continue;
4934             }
4935             else {
4936                 x = xend; /* to EXTRAS' end at which \n is not found */
4937                 break;
4938             }
4939         }
4940
4941         namestr = x;
4942         if (nl) {
4943             namelen = nl - namestr;
4944             x = nl + 1;
4945         }
4946         else {
4947             namelen = xend - namestr;
4948             x = xend;
4949         }
4950
4951         othersvp = hv_fetch(hv, (char *)namestr, namelen, FALSE);
4952         otherhv = MUTABLE_HV(SvRV(*othersvp));
4953         otherbitssvp = hv_fetchs(otherhv, "BITS", FALSE);
4954         otherbits = (STRLEN)SvUV(*otherbitssvp);
4955
4956         if (bits != otherbits || bits != 1) {
4957             Perl_croak(aTHX_ "panic: _swash_to_invlist only operates on boolean "
4958                        "properties, bits=%" UVuf ", otherbits=%" UVuf,
4959                        (UV)bits, (UV)otherbits);
4960         }
4961
4962         /* The "other" swatch must be destroyed after. */
4963         other = _swash_to_invlist((SV *)*othersvp);
4964
4965         /* End of code copied from swatch_get() */
4966         switch (opc) {
4967         case '+':
4968             _invlist_union(invlist, other, &invlist);
4969             break;
4970         case '!':
4971             _invlist_union_maybe_complement_2nd(invlist, other, TRUE, &invlist);
4972             break;
4973         case '-':
4974             _invlist_subtract(invlist, other, &invlist);
4975             break;
4976         case '&':
4977             _invlist_intersection(invlist, other, &invlist);
4978             break;
4979         default:
4980             break;
4981         }
4982         sv_free(other); /* through with it! */
4983     }
4984
4985     SvREADONLY_on(invlist);
4986     return invlist;
4987 }
4988
4989 SV*
4990 Perl__get_swash_invlist(pTHX_ SV* const swash)
4991 {
4992     SV** ptr;
4993
4994     PERL_ARGS_ASSERT__GET_SWASH_INVLIST;
4995
4996     if (! SvROK(swash)) {
4997         return NULL;
4998     }
4999
5000     /* If it really isn't a hash, it isn't really swash; must be an inversion
5001      * list */
5002     if (SvTYPE(SvRV(swash)) != SVt_PVHV) {
5003         return SvRV(swash);
5004     }
5005
5006     ptr = hv_fetchs(MUTABLE_HV(SvRV(swash)), "V", FALSE);
5007     if (! ptr) {
5008         return NULL;
5009     }
5010
5011     return *ptr;
5012 }
5013
5014 bool
5015 Perl_check_utf8_print(pTHX_ const U8* s, const STRLEN len)
5016 {
5017     /* May change: warns if surrogates, non-character code points, or
5018      * non-Unicode code points are in s which has length len bytes.  Returns
5019      * TRUE if none found; FALSE otherwise.  The only other validity check is
5020      * to make sure that this won't exceed the string's length.
5021      *
5022      * Code points above the platform's C<IV_MAX> will raise a deprecation
5023      * warning, unless those are turned off.  */
5024
5025     const U8* const e = s + len;
5026     bool ok = TRUE;
5027
5028     PERL_ARGS_ASSERT_CHECK_UTF8_PRINT;
5029
5030     while (s < e) {
5031         if (UTF8SKIP(s) > len) {
5032             Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
5033                            "%s in %s", unees, PL_op ? OP_DESC(PL_op) : "print");
5034             return FALSE;
5035         }
5036         if (UNLIKELY(isUTF8_POSSIBLY_PROBLEMATIC(*s))) {
5037             if (UNLIKELY(UTF8_IS_SUPER(s, e))) {
5038                 if (   ckWARN_d(WARN_NON_UNICODE)
5039                     || (   ckWARN_d(WARN_DEPRECATED)
5040 #ifndef UV_IS_QUAD
5041                         && UNLIKELY(is_utf8_cp_above_31_bits(s, e))
5042 #else   /* Below is 64-bit words */
5043                         /* 2**63 and up meet these conditions provided we have
5044                          * a 64-bit word. */
5045 #   ifdef EBCDIC
5046                         && *s == 0xFE
5047                         && NATIVE_UTF8_TO_I8(s[1]) >= 0xA8
5048 #   else
5049                         && *s == 0xFF
5050                            /* s[1] being above 0x80 overflows */
5051                         && s[2] >= 0x88
5052 #   endif
5053 #endif
5054                 )) {
5055                     /* A side effect of this function will be to warn */
5056                     (void) utf8n_to_uvchr(s, e - s, NULL, UTF8_WARN_SUPER);
5057                     ok = FALSE;
5058                 }
5059             }
5060             else if (UNLIKELY(UTF8_IS_SURROGATE(s, e))) {
5061                 if (ckWARN_d(WARN_SURROGATE)) {
5062                     /* This has a different warning than the one the called
5063                      * function would output, so can't just call it, unlike we
5064                      * do for the non-chars and above-unicodes */
5065                     UV uv = utf8_to_uvchr_buf(s, e, NULL);
5066                     Perl_warner(aTHX_ packWARN(WARN_SURROGATE),
5067                         "Unicode surrogate U+%04" UVXf " is illegal in UTF-8", uv);
5068                     ok = FALSE;
5069                 }
5070             }
5071             else if (UNLIKELY(UTF8_IS_NONCHAR(s, e)) && (ckWARN_d(WARN_NONCHAR))) {
5072                 /* A side effect of this function will be to warn */
5073                 (void) utf8n_to_uvchr(s, e - s, NULL, UTF8_WARN_NONCHAR);
5074                 ok = FALSE;
5075             }
5076         }
5077         s += UTF8SKIP(s);
5078     }
5079
5080     return ok;
5081 }
5082
5083 /*
5084 =for apidoc pv_uni_display
5085
5086 Build to the scalar C<dsv> a displayable version of the string C<spv>,
5087 length C<len>, the displayable version being at most C<pvlim> bytes long
5088 (if longer, the rest is truncated and C<"..."> will be appended).
5089
5090 The C<flags> argument can have C<UNI_DISPLAY_ISPRINT> set to display
5091 C<isPRINT()>able characters as themselves, C<UNI_DISPLAY_BACKSLASH>
5092 to display the C<\\[nrfta\\]> as the backslashed versions (like C<"\n">)
5093 (C<UNI_DISPLAY_BACKSLASH> is preferred over C<UNI_DISPLAY_ISPRINT> for C<"\\">).
5094 C<UNI_DISPLAY_QQ> (and its alias C<UNI_DISPLAY_REGEX>) have both
5095 C<UNI_DISPLAY_BACKSLASH> and C<UNI_DISPLAY_ISPRINT> turned on.
5096
5097 The pointer to the PV of the C<dsv> is returned.
5098
5099 See also L</sv_uni_display>.
5100
5101 =cut */
5102 char *
5103 Perl_pv_uni_display(pTHX_ SV *dsv, const U8 *spv, STRLEN len, STRLEN pvlim, UV flags)
5104 {
5105     int truncated = 0;
5106     const char *s, *e;
5107
5108     PERL_ARGS_ASSERT_PV_UNI_DISPLAY;
5109
5110     SvPVCLEAR(dsv);
5111     SvUTF8_off(dsv);
5112     for (s = (const char *)spv, e = s + len; s < e; s += UTF8SKIP(s)) {
5113          UV u;
5114           /* This serves double duty as a flag and a character to print after
5115              a \ when flags & UNI_DISPLAY_BACKSLASH is true.
5116           */
5117          char ok = 0;
5118
5119          if (pvlim && SvCUR(dsv) >= pvlim) {
5120               truncated++;
5121               break;
5122          }
5123          u = utf8_to_uvchr_buf((U8*)s, (U8*)e, 0);
5124          if (u < 256) {
5125              const unsigned char c = (unsigned char)u & 0xFF;
5126              if (flags & UNI_DISPLAY_BACKSLASH) {
5127                  switch (c) {
5128                  case '\n':
5129                      ok = 'n'; break;
5130                  case '\r':
5131                      ok = 'r'; break;
5132                  case '\t':
5133                      ok = 't'; break;
5134                  case '\f':
5135                      ok = 'f'; break;
5136                  case '\a':
5137                      ok = 'a'; break;
5138                  case '\\':
5139                      ok = '\\'; break;
5140                  default: break;
5141                  }
5142                  if (ok) {
5143                      const char string = ok;
5144                      sv_catpvs(dsv, "\\");
5145                      sv_catpvn(dsv, &string, 1);
5146                  }
5147              }
5148              /* isPRINT() is the locale-blind version. */
5149              if (!ok && (flags & UNI_DISPLAY_ISPRINT) && isPRINT(c)) {
5150                  const char string = c;
5151                  sv_catpvn(dsv, &string, 1);
5152                  ok = 1;
5153              }
5154          }
5155          if (!ok)
5156              Perl_sv_catpvf(aTHX_ dsv, "\\x{%" UVxf "}", u);
5157     }
5158     if (truncated)
5159          sv_catpvs(dsv, "...");
5160
5161     return SvPVX(dsv);
5162 }
5163
5164 /*
5165 =for apidoc sv_uni_display
5166
5167 Build to the scalar C<dsv> a displayable version of the scalar C<sv>,
5168 the displayable version being at most C<pvlim> bytes long
5169 (if longer, the rest is truncated and "..." will be appended).
5170
5171 The C<flags> argument is as in L</pv_uni_display>().
5172
5173 The pointer to the PV of the C<dsv> is returned.
5174
5175 =cut
5176 */
5177 char *
5178 Perl_sv_uni_display(pTHX_ SV *dsv, SV *ssv, STRLEN pvlim, UV flags)
5179 {
5180     const char * const ptr =
5181         isREGEXP(ssv) ? RX_WRAPPED((REGEXP*)ssv) : SvPVX_const(ssv);
5182
5183     PERL_ARGS_ASSERT_SV_UNI_DISPLAY;
5184
5185     return Perl_pv_uni_display(aTHX_ dsv, (const U8*)ptr,
5186                                 SvCUR(ssv), pvlim, flags);
5187 }
5188
5189 /*
5190 =for apidoc foldEQ_utf8
5191
5192 Returns true if the leading portions of the strings C<s1> and C<s2> (either or both
5193 of which may be in UTF-8) are the same case-insensitively; false otherwise.
5194 How far into the strings to compare is determined by other input parameters.
5195
5196 If C<u1> is true, the string C<s1> is assumed to be in UTF-8-encoded Unicode;
5197 otherwise it is assumed to be in native 8-bit encoding.  Correspondingly for C<u2>
5198 with respect to C<s2>.
5199
5200 If the byte length C<l1> is non-zero, it says how far into C<s1> to check for fold
5201 equality.  In other words, C<s1>+C<l1> will be used as a goal to reach.  The
5202 scan will not be considered to be a match unless the goal is reached, and
5203 scanning won't continue past that goal.  Correspondingly for C<l2> with respect to
5204 C<s2>.
5205
5206 If C<pe1> is non-C<NULL> and the pointer it points to is not C<NULL>, that pointer is
5207 considered an end pointer to the position 1 byte past the maximum point
5208 in C<s1> beyond which scanning will not continue under any circumstances.
5209 (This routine assumes that UTF-8 encoded input strings are not malformed;
5210 malformed input can cause it to read past C<pe1>).
5211 This means that if both C<l1> and C<pe1> are specified, and C<pe1>
5212 is less than C<s1>+C<l1>, the match will never be successful because it can
5213 never
5214 get as far as its goal (and in fact is asserted against).  Correspondingly for
5215 C<pe2> with respect to C<s2>.
5216
5217 At least one of C<s1> and C<s2> must have a goal (at least one of C<l1> and
5218 C<l2> must be non-zero), and if both do, both have to be
5219 reached for a successful match.   Also, if the fold of a character is multiple
5220 characters, all of them must be matched (see tr21 reference below for
5221 'folding').
5222
5223 Upon a successful match, if C<pe1> is non-C<NULL>,
5224 it will be set to point to the beginning of the I<next> character of C<s1>
5225 beyond what was matched.  Correspondingly for C<pe2> and C<s2>.
5226
5227 For case-insensitiveness, the "casefolding" of Unicode is used
5228 instead of upper/lowercasing both the characters, see
5229 L<http://www.unicode.org/unicode/reports/tr21/> (Case Mappings).
5230
5231 =cut */
5232
5233 /* A flags parameter has been added which may change, and hence isn't
5234  * externally documented.  Currently it is:
5235  *  0 for as-documented above
5236  *  FOLDEQ_UTF8_NOMIX_ASCII meaning that if a non-ASCII character folds to an
5237                             ASCII one, to not match
5238  *  FOLDEQ_LOCALE           is set iff the rules from the current underlying
5239  *                          locale are to be used.
5240  *  FOLDEQ_S1_ALREADY_FOLDED  s1 has already been folded before calling this
5241  *                          routine.  This allows that step to be skipped.
5242  *                          Currently, this requires s1 to be encoded as UTF-8
5243  *                          (u1 must be true), which is asserted for.
5244  *  FOLDEQ_S1_FOLDS_SANE    With either NOMIX_ASCII or LOCALE, no folds may
5245  *                          cross certain boundaries.  Hence, the caller should
5246  *                          let this function do the folding instead of
5247  *                          pre-folding.  This code contains an assertion to
5248  *                          that effect.  However, if the caller knows what
5249  *                          it's doing, it can pass this flag to indicate that,
5250  *                          and the assertion is skipped.
5251  *  FOLDEQ_S2_ALREADY_FOLDED  Similarly.
5252  *  FOLDEQ_S2_FOLDS_SANE
5253  */
5254 I32
5255 Perl_foldEQ_utf8_flags(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2, U32 flags)
5256 {
5257     const U8 *p1  = (const U8*)s1; /* Point to current char */
5258     const U8 *p2  = (const U8*)s2;
5259     const U8 *g1 = NULL;       /* goal for s1 */
5260     const U8 *g2 = NULL;
5261     const U8 *e1 = NULL;       /* Don't scan s1 past this */
5262     U8 *f1 = NULL;             /* Point to current folded */
5263     const U8 *e2 = NULL;
5264     U8 *f2 = NULL;
5265     STRLEN n1 = 0, n2 = 0;              /* Number of bytes in current char */
5266     U8 foldbuf1[UTF8_MAXBYTES_CASE+1];
5267     U8 foldbuf2[UTF8_MAXBYTES_CASE+1];
5268     U8 flags_for_folder = FOLD_FLAGS_FULL;
5269
5270     PERL_ARGS_ASSERT_FOLDEQ_UTF8_FLAGS;
5271
5272     assert( ! ((flags & (FOLDEQ_UTF8_NOMIX_ASCII | FOLDEQ_LOCALE))
5273                && (((flags & FOLDEQ_S1_ALREADY_FOLDED)
5274                      && !(flags & FOLDEQ_S1_FOLDS_SANE))
5275                    || ((flags & FOLDEQ_S2_ALREADY_FOLDED)
5276                        && !(flags & FOLDEQ_S2_FOLDS_SANE)))));
5277     /* The algorithm is to trial the folds without regard to the flags on
5278      * the first line of the above assert(), and then see if the result
5279      * violates them.  This means that the inputs can't be pre-folded to a
5280      * violating result, hence the assert.  This could be changed, with the
5281      * addition of extra tests here for the already-folded case, which would
5282      * slow it down.  That cost is more than any possible gain for when these
5283      * flags are specified, as the flags indicate /il or /iaa matching which
5284      * is less common than /iu, and I (khw) also believe that real-world /il
5285      * and /iaa matches are most likely to involve code points 0-255, and this
5286      * function only under rare conditions gets called for 0-255. */
5287
5288     if (flags & FOLDEQ_LOCALE) {
5289         if (IN_UTF8_CTYPE_LOCALE) {
5290             flags &= ~FOLDEQ_LOCALE;
5291         }
5292         else {
5293             flags_for_folder |= FOLD_FLAGS_LOCALE;
5294         }
5295     }
5296
5297     if (pe1) {
5298         e1 = *(U8**)pe1;
5299     }
5300
5301     if (l1) {
5302         g1 = (const U8*)s1 + l1;
5303     }
5304
5305     if (pe2) {
5306         e2 = *(U8**)pe2;
5307     }
5308
5309     if (l2) {
5310         g2 = (const U8*)s2 + l2;
5311     }
5312
5313     /* Must have at least one goal */
5314     assert(g1 || g2);
5315
5316     if (g1) {
5317
5318         /* Will never match if goal is out-of-bounds */
5319         assert(! e1  || e1 >= g1);
5320
5321         /* Here, there isn't an end pointer, or it is beyond the goal.  We
5322         * only go as far as the goal */
5323         e1 = g1;
5324     }
5325     else {
5326         assert(e1);    /* Must have an end for looking at s1 */
5327     }
5328
5329     /* Same for goal for s2 */
5330     if (g2) {
5331         assert(! e2  || e2 >= g2);
5332         e2 = g2;
5333     }
5334     else {
5335         assert(e2);
5336     }
5337
5338     /* If both operands are already folded, we could just do a memEQ on the
5339      * whole strings at once, but it would be better if the caller realized
5340      * this and didn't even call us */
5341
5342     /* Look through both strings, a character at a time */
5343     while (p1 < e1 && p2 < e2) {
5344
5345         /* If at the beginning of a new character in s1, get its fold to use
5346          * and the length of the fold. */
5347         if (n1 == 0) {
5348             if (flags & FOLDEQ_S1_ALREADY_FOLDED) {
5349                 f1 = (U8 *) p1;
5350                 assert(u1);
5351                 n1 = UTF8SKIP(f1);
5352             }
5353             else {
5354                 if (isASCII(*p1) && ! (flags & FOLDEQ_LOCALE)) {
5355
5356                     /* We have to forbid mixing ASCII with non-ASCII if the
5357                      * flags so indicate.  And, we can short circuit having to
5358                      * call the general functions for this common ASCII case,
5359                      * all of whose non-locale folds are also ASCII, and hence
5360                      * UTF-8 invariants, so the UTF8ness of the strings is not
5361                      * relevant. */
5362                     if ((flags & FOLDEQ_UTF8_NOMIX_ASCII) && ! isASCII(*p2)) {
5363                         return 0;
5364                     }
5365                     n1 = 1;
5366                     *foldbuf1 = toFOLD(*p1);
5367                 }
5368                 else if (u1) {
5369                     _toFOLD_utf8_flags(p1, e1, foldbuf1, &n1, flags_for_folder);
5370                 }
5371                 else {  /* Not UTF-8, get UTF-8 fold */
5372                     _to_uni_fold_flags(*p1, foldbuf1, &n1, flags_for_folder);
5373                 }
5374                 f1 = foldbuf1;
5375             }
5376         }
5377
5378         if (n2 == 0) {    /* Same for s2 */
5379             if (flags & FOLDEQ_S2_ALREADY_FOLDED) {
5380                 f2 = (U8 *) p2;
5381                 assert(u2);
5382                 n2 = UTF8SKIP(f2);
5383             }
5384             else {
5385                 if (isASCII(*p2) && ! (flags & FOLDEQ_LOCALE)) {
5386                     if ((flags & FOLDEQ_UTF8_NOMIX_ASCII) && ! isASCII(*p1)) {
5387                         return 0;
5388                     }
5389                     n2 = 1;
5390                     *foldbuf2 = toFOLD(*p2);
5391                 }
5392                 else if (u2) {
5393                     _toFOLD_utf8_flags(p2, e2, foldbuf2, &n2, flags_for_folder);
5394                 }
5395                 else {
5396                     _to_uni_fold_flags(*p2, foldbuf2, &n2, flags_for_folder);
5397                 }
5398                 f2 = foldbuf2;
5399             }
5400         }
5401
5402         /* Here f1 and f2 point to the beginning of the strings to compare.
5403          * These strings are the folds of the next character from each input
5404          * string, stored in UTF-8. */
5405
5406         /* While there is more to look for in both folds, see if they
5407         * continue to match */
5408         while (n1 && n2) {
5409             U8 fold_length = UTF8SKIP(f1);
5410             if (fold_length != UTF8SKIP(f2)
5411                 || (fold_length == 1 && *f1 != *f2) /* Short circuit memNE
5412                                                        function call for single
5413                                                        byte */
5414                 || memNE((char*)f1, (char*)f2, fold_length))
5415             {
5416                 return 0; /* mismatch */
5417             }
5418
5419             /* Here, they matched, advance past them */
5420             n1 -= fold_length;
5421             f1 += fold_length;
5422             n2 -= fold_length;
5423             f2 += fold_length;
5424         }
5425
5426         /* When reach the end of any fold, advance the input past it */
5427         if (n1 == 0) {
5428             p1 += u1 ? UTF8SKIP(p1) : 1;
5429         }
5430         if (n2 == 0) {
5431             p2 += u2 ? UTF8SKIP(p2) : 1;
5432         }
5433     } /* End of loop through both strings */
5434
5435     /* A match is defined by each scan that specified an explicit length
5436     * reaching its final goal, and the other not having matched a partial
5437     * character (which can happen when the fold of a character is more than one
5438     * character). */
5439     if (! ((g1 == 0 || p1 == g1) && (g2 == 0 || p2 == g2)) || n1 || n2) {
5440         return 0;
5441     }
5442
5443     /* Successful match.  Set output pointers */
5444     if (pe1) {
5445         *pe1 = (char*)p1;
5446     }
5447     if (pe2) {
5448         *pe2 = (char*)p2;
5449     }
5450     return 1;
5451 }
5452
5453 /* XXX The next two functions should likely be moved to mathoms.c once all
5454  * occurrences of them are removed from the core; some cpan-upstream modules
5455  * still use them */
5456
5457 U8 *
5458 Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
5459 {
5460     PERL_ARGS_ASSERT_UVUNI_TO_UTF8;
5461
5462     return Perl_uvoffuni_to_utf8_flags(aTHX_ d, uv, 0);
5463 }
5464
5465 /*
5466 =for apidoc utf8n_to_uvuni
5467
5468 Instead use L</utf8_to_uvchr_buf>, or rarely, L</utf8n_to_uvchr>.
5469
5470 This function was useful for code that wanted to handle both EBCDIC and
5471 ASCII platforms with Unicode properties, but starting in Perl v5.20, the
5472 distinctions between the platforms have mostly been made invisible to most
5473 code, so this function is quite unlikely to be what you want.  If you do need
5474 this precise functionality, use instead
5475 C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|/utf8_to_uvchr_buf>>
5476 or C<L<NATIVE_TO_UNI(utf8n_to_uvchr(...))|/utf8n_to_uvchr>>.
5477
5478 =cut
5479 */
5480
5481 UV
5482 Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
5483 {
5484     PERL_ARGS_ASSERT_UTF8N_TO_UVUNI;
5485
5486     return NATIVE_TO_UNI(utf8n_to_uvchr(s, curlen, retlen, flags));
5487 }
5488
5489 /*
5490 =for apidoc uvuni_to_utf8_flags
5491
5492 Instead you almost certainly want to use L</uvchr_to_utf8> or
5493 L</uvchr_to_utf8_flags>.
5494
5495 This function is a deprecated synonym for L</uvoffuni_to_utf8_flags>,
5496 which itself, while not deprecated, should be used only in isolated
5497 circumstances.  These functions were useful for code that wanted to handle
5498 both EBCDIC and ASCII platforms with Unicode properties, but starting in Perl
5499 v5.20, the distinctions between the platforms have mostly been made invisible
5500 to most code, so this function is quite unlikely to be what you want.
5501
5502 =cut
5503 */
5504
5505 U8 *
5506 Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
5507 {
5508     PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS;
5509
5510     return uvoffuni_to_utf8_flags(d, uv, flags);
5511 }
5512
5513 /*
5514  * ex: set ts=8 sts=4 sw=4 et:
5515  */