summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNARUSE, Yui <naruse@airemix.jp>2022-12-29 15:59:52 +0900
committerNARUSE, Yui <naruse@airemix.jp>2022-12-29 15:59:52 +0900
commita7d467a792c644a7260d6560ea2002fdb8ff6de3 (patch)
tree5f64b29c35698c79df887148faf1c8b67258fe10
parent5c551ac59f9620901394a46dffda5a1833b9c4b0 (diff)
merge revision(s) b726d60c986bf951d13e7a2ab5f5e58f58657b03: [Backport #19273]
Fix [Bug 19273], set correct value to `outer_repeat` on `OP_REPEAT` (#7035) --- regexec.c | 2 +- test/ruby/test_regexp.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-)
-rw-r--r--regexec.c2
-rw-r--r--test/ruby/test_regexp.rb5
-rw-r--r--version.h2
3 files changed, 7 insertions, 2 deletions
diff --git a/regexec.c b/regexec.c
index c95abad258..d261a3cbc0 100644
--- a/regexec.c
+++ b/regexec.c
@@ -615,7 +615,7 @@ init_cache_index_table(regex_t* reg, OnigCacheIndex *table)
if (reg->repeat_range[mem].lower == 0) {
table->addr = pbegin;
table->num = num - current_mem_num;
- table->outer_repeat = mem;
+ table->outer_repeat = -1;
num++;
table++;
}
diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb
index 40d3559c0b..98bf41d2f1 100644
--- a/test/ruby/test_regexp.rb
+++ b/test/ruby/test_regexp.rb
@@ -1721,6 +1721,11 @@ class TestRegexp < Test::Unit::TestCase
end;
end
+ def test_bug_19273 # [Bug #19273]
+ pattern = /(?:(?:-?b)|(?:-?(?:1_?(?:0_?)*)?0))(?::(?:(?:-?b)|(?:-?(?:1_?(?:0_?)*)?0))){0,3}/
+ assert_equal("10:0:0".match(pattern)[0], "10:0:0")
+ end
+
def test_linear_time_p
assert_send [Regexp, :linear_time?, /a/]
assert_send [Regexp, :linear_time?, 'a']
diff --git a/version.h b/version.h
index 15e3afa97e..7b701b14f8 100644
--- a/version.h
+++ b/version.h
@@ -11,7 +11,7 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 0
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
-#define RUBY_PATCHLEVEL 1
+#define RUBY_PATCHLEVEL 2
#include "ruby/version.h"
#include "ruby/internal/abi.h"