In perl.git, the branch blead has been updated <https://perl5.git.perl.org/perl.git/commitdiff/cc27c3b3ef8a22c153554c7756ac1a22daddff28?hp=b20a43d74c4dca14f892166850418e52b35ba5a4>
- Log ----------------------------------------------------------------- commit cc27c3b3ef8a22c153554c7756ac1a22daddff28 Author: Karl Williamson <k...@cpan.org> Date: Sun Dec 16 11:54:03 2018 -0700 Correct previous perldelta entry, and add a test 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/ ----------------------------------------------------------------------- Summary of changes: pod/perl5294delta.pod | 9 +++++---- pod/perldelta.pod | 13 +++++++++++++ t/re/pat.t | 7 ++++++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/pod/perl5294delta.pod b/pod/perl5294delta.pod index 95c7e7547e..aae8ea9297 100644 --- a/pod/perl5294delta.pod +++ b/pod/perl5294delta.pod @@ -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 diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 7509c3ef88..372af385ec 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -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) diff --git a/t/re/pat.t b/t/re/pat.t index ddd34fbd8d..b9c1e262ca 100644 --- a/t/re/pat.t +++ b/t/re/pat.t @@ -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"); } { -- Perl5 Master Repository