This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Fix -Dr bug
authorKarl Williamson <khw@cpan.org>
Sun, 26 May 2019 18:22:26 +0000 (12:22 -0600)
committerKarl Williamson <khw@cpan.org>
Sun, 15 Sep 2019 04:26:49 +0000 (22:26 -0600)
If dumping the program and a single range crosses the border between
being in the bitmap and not, the range must be split at the border
because the output has separate text for things in the bitmap vs. those
not.

I'm not sure that there is a situation where this currently occurs, but
it will so with a future commit

regcomp.c

index d515d1c..b389f9e 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -21520,9 +21520,14 @@ S_put_range(pTHX_ SV *sv, UV start, const UV end, const bool allow_literals)
 
         /* As a final resort, output the range or subrange as hex. */
 
-        this_end = (end < NUM_ANYOF_CODE_POINTS)
-                    ? end
-                    : NUM_ANYOF_CODE_POINTS - 1;
+        if (start >= NUM_ANYOF_CODE_POINTS) {
+            this_end = end;
+        }
+        else {
+            this_end = (end < NUM_ANYOF_CODE_POINTS)
+                        ? end
+                        : NUM_ANYOF_CODE_POINTS - 1;
+        }
 #if NUM_ANYOF_CODE_POINTS > 256
         format = (this_end < 256)
                  ? "\\x%02" UVXf "-\\x%02" UVXf