if (do_utf8 && !UTF8_IS_INVARIANT(c)) {
c = utf8n_to_uvchr(p, UTF8_MAXBYTES, &len,
- (UTF8_ALLOW_DEFAULT & UTF8_ALLOW_ANYUV) | UTF8_CHECK_ONLY);
- /* see [perl #37836] for UTF8_ALLOW_ANYUV */
+ (UTF8_ALLOW_DEFAULT & UTF8_ALLOW_ANYUV)
+ | UTF8_ALLOW_FFFF | UTF8_CHECK_ONLY);
+ /* see [perl #37836] for UTF8_ALLOW_ANYUV; [perl #38293] for
+ * UTF8_ALLOW_FFFF */
if (len == (STRLEN)-1)
Perl_croak(aTHX_ "Malformed UTF-8 character (fatal)");
}
}
-plan tests => 1142; # Update this when adding/deleting tests.
+plan tests => 1143; # Update this when adding/deleting tests.
run_tests() unless caller;
iseq $_, "!Bang!1!Bang!2!Bang!3!Bang!";
}
+ {
+ # Earlier versions of Perl said this was fatal.
+ local $Message = "U+0FFFF shouldn't crash the regex engine";
+ no warnings 'utf8';
+ my $a = eval "chr(65535)";
+ use warnings;
+ my $warning_message;
+ local $SIG{__WARN__} = sub { $warning_message = $_[0] };
+ eval $a =~ /[a-z]/;
+ ok(1); # If it didn't crash, it worked.
+ }
} # End of sub run_tests
1;