Correct previous perldelta entry, and add a test
authorKarl Williamson <khw@cpan.org>
Sun, 16 Dec 2018 18:54:03 +0000 (11:54 -0700)
committerKarl Williamson <khw@cpan.org>
Sun, 16 Dec 2018 19:08:06 +0000 (12:08 -0700)
The text of perl5294delta was wrong about a change.  This commit changes
that text, and adds an entry to the latest perldelta with the
correction.  A test has been added to verify the way things work.

The wrong language led to this blog post, and my comment in it:
https://www.effectiveperlprogramming.com/2018/12/perl-v5-30-lets-you-match-more-with-the-general-quantifier/

pod/perl5294delta.pod
pod/perldelta.pod
t/re/pat.t

index 95c7e75..aae8ea9 100644 (file)
@@ -14,11 +14,12 @@ L<perl5293delta>, which describes differences between 5.29.2 and 5.29.3.
 
 =head1 Core Enhancements
 
-=head2 The maximum number of times a pattern can match has been doubled
-to 65535
+=head2 The upper limit C<"n"> specifiable in a regular expression
+quantifier of the form C<"{m,n}"> has been doubled to 65534
 
-This means if you specify C<qr/a+/> that there can be anywhere from 1
-through 65535 C<"a">'s in a row, instead of 32267 as previously.
+The meaning of an unbounded upper quantifier C<"{m,}"> remains unchanged.
+It matches 2**31 - 1 times on most platforms, and more on ones where a C
+language short variable is more than 4 bytes long.
 
 =head1 Incompatible Changes
 
index 7509c3e..372af38 100644 (file)
@@ -12,6 +12,19 @@ release.
 If you are upgrading from an earlier release such as 5.29.4, first read
 L<perl5295delta>, which describes differences between 5.29.4 and 5.29.5.
 
+=head1 Core Enhancements
+
+=head2 The upper limit C<"n"> specifiable in a regular expression
+quantifier of the form C<"{m,n}"> has been doubled to 65534
+
+The meaning of an unbounded upper quantifier C<"{m,}"> remains unchanged.
+It matches 2**31 - 1 times on most platforms, and more on ones where a C
+language short variable is more than 4 bytes long.
+
+The text above is what perl5294delta should have said.  Instead it said
+"The maximum number of times a pattern can match has been doubled to 65535"
+That statement was wrong.  Try to forget you ever saw it.
+
 =head1 Security
 
 =head2 [CVE-2018-18312] Heap-buffer-overflow write in S_regatom (regcomp.c)
index ddd34fb..b9c1e26 100644 (file)
@@ -23,7 +23,7 @@ BEGIN {
     skip_all('no re module') unless defined &DynaLoader::boot_DynaLoader;
     skip_all_without_unicode_tables();
 
-plan tests => 850;  # Update this when adding/deleting tests.
+plan tests => 851;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
@@ -339,6 +339,11 @@ sub run_tests {
         like($@, qr/^\QQuantifier in {,} bigger than/, $message);
         eval "'aaa' =~ /a{1,$::reg_infty_p}/";
         like($@, qr/^\QQuantifier in {,} bigger than/, $message);
+
+        # It should be 'a' x 2147483647, but that exhausts memory on
+        # reasonably sized modern machines
+        like('a' x $::reg_infty_p, qr/a{1,}/,
+             "{1,} matches more times than REG_INFTY");
     }
 
     {