summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pod/perldelta.pod7
-rw-r--r--regcomp.c6
-rw-r--r--t/re/re_tests3
3 files changed, 16 insertions, 0 deletions
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index 33b9af48ea..9920e1e52a 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -717,6 +717,13 @@ C</[[:ascii:]]/> and C</[[:blank:]]/> now use locale rules under
C<use locale> when the platform supports that. Previously, they used
the platform's native character set.
+=item *
+
+A regression introduced in 5.13.6 was fixed. This involved an inverted
+bracketed character class in a regular expression that consisted solely
+of a Unicode property, that property wasn't getting inverted outside the
+Latin1 range.
+
=back
=head1 Known Problems
diff --git a/regcomp.c b/regcomp.c
index b33eddac88..a996049898 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -11425,6 +11425,12 @@ parseit:
* there should not be overlap unless is /d rules. */
_invlist_invert(nonbitmap);
+ /* Any swash can't be used as-is, because we've inverted things */
+ if (swash) {
+ SvREFCNT_dec(swash);
+ swash = NULL;
+ }
+
for (i = 0; i < 256; ++i) {
if (ANYOF_BITMAP_TEST(ret, i)) {
ANYOF_BITMAP_CLEAR(ret, i);
diff --git a/t/re/re_tests b/t/re/re_tests
index 4eafaf79bc..e7680c9c23 100644
--- a/t/re/re_tests
+++ b/t/re/re_tests
@@ -1572,4 +1572,7 @@ abc\N{def - c - \\N{NAME} must be resolved by the lexer
/[[:lower:]]/i \N{U+3400} n - -
/[[:upper:]]/i \N{U+01BB} n - -
+# [perl #110648]
+[^\p{Alphabetic}] \x{100} n - -
+
# vim: softtabstop=0 noexpandtab