-
Notifications
You must be signed in to change notification settings - Fork 571
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
qr/\88/ hangs (Bleadperl breaks JE again) #10665
Comments
From @cpansproutThis one-liner hangs during regexp compilation: In perl5.13.4 it compiles successfully, but qr/\9/ dies, because it is an invalid backreference. I think the correct behaviour is for qr/\88/ to die the same way. Note also that it does not hang if the second digit is a valid octal digit: This was caused by: From c99e91e Mon Sep 17 00:00:00 2001 8 and 9 are not treated as alphas in parsing as opposed to illegal This also adds tests to verify that 1-3 digits work in char classes. I created an isOCTAL macro in case that lookup gets moved to a bit Flags: Site configuration information for perl 5.13.5: Configured by sprout at Sun Sep 19 17:34:01 PDT 2010. Summary of my perl5 (revision 5 version 13 subversion 5 patch v5.13.5-8-g8e58c70) configuration: Locally applied patches: @INC for perl 5.13.5: Environment for perl 5.13.5: |
From @khwilliamsonThe attached patch fixes this. Note that the circumstances when this Note that qr/\88/ means qr/\00088/. I consider this a bug, but others |
From @khwilliamson0001-regcomp.c-perl-78058-qr-18-loops.patchFrom 039c541858ae9a7b3fb2962ade008b1b2a704b57 Mon Sep 17 00:00:00 2001
From: Karl Williamson <public@khwilliamson.com>
Date: Tue, 28 Sep 2010 14:44:08 -0600
Subject: [PATCH] regcomp.c [perl #78058] qr/\18/ loops
This patch restores the behavior of /\18/ to mean /\0018/, which was
inadvertently changed by c99e91e919b4bb89bab7829a9026ee01b1fff2a1.
This bug happens when t the first digit is [1-9], and the
second [89].
---
regcomp.c | 2 +-
t/re/re.t | 9 +++++++--
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/regcomp.c b/regcomp.c
index ff9f87b..bcdc65f 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -7601,7 +7601,7 @@ tryagain:
case '0': case '1': case '2': case '3':case '4':
case '5': case '6': case '7': case '8':case '9':
if (*p == '0' ||
- (isOCTAL(p[1]) && atoi(p) >= RExC_npar))
+ (isDIGIT(p[1]) && atoi(p) >= RExC_npar))
{
I32 flags = PERL_SCAN_SILENT_ILLDIGIT;
STRLEN numlen = 3;
diff --git a/t/re/re.t b/t/re/re.t
index 76835f0..ecbcb29 100644
--- a/t/re/re.t
+++ b/t/re/re.t
@@ -53,13 +53,18 @@ if ('1234'=~/(?:(?<A>\d)|(?<C>!))(?<B>\d)(?<A>\d)(?<B>\d)/){
is(regnames_count(),3);
}
- { # Keep this test last, as whole script will be interrupted if times out
+ { # Keep these tests last, as whole script will be interrupted if times out
# Bug #72998; this can loop
watchdog(2);
eval '"\x{100}\x{FB00}" =~ /\x{100}\N{U+66}+/i';
pass("Didn't loop");
+
+ # Bug #78058; this can loop
+ watchdog(2);
+ eval 'qr/\18/';
+ pass("qr/\18/ didn't loop");
}
# New tests above this line, don't forget to update the test count below!
-BEGIN { plan tests => 19 }
+BEGIN { plan tests => 20 }
# No tests here!
--
1.5.6.3
|
The RT System itself - Status changed from 'new' to 'open' |
From @cpansproutOn Tue Sep 28 13:56:09 2010, public@khwilliamson.com wrote:
Thank you. Applied as ca67da4. |
From [Unknown Contact. See original ticket]On Tue Sep 28 13:56:09 2010, public@khwilliamson.com wrote:
Thank you. Applied as ca67da4. |
@cpansprout - Status changed from 'open' to 'resolved' |
Migrated from rt.perl.org#78058 (status was 'resolved')
Searchable as RT78058$
The text was updated successfully, but these errors were encountered: