summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2022-04-12 20:07:08 +0900
committernagachika <nagachika@ruby-lang.org>2022-04-12 20:48:55 +0900
commit052ec6d2585c3ace95671013d336f5543624ef3d (patch)
tree91bcd23c4a22fc947adc44203261ec0c96df4cae
parent47c3f31fd93fc5bb60bf401b666b94e667ec717e (diff)
Just free compiled pattern if no space is used
-rw-r--r--regcomp.c14
-rw-r--r--test/ruby/test_regexp.rb9
-rw-r--r--version.h2
3 files changed, 18 insertions, 7 deletions
diff --git a/regcomp.c b/regcomp.c
index 3a438b94c4..bd38313875 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -142,8 +142,13 @@ bitset_on_num(BitSetRef bs)
static void
onig_reg_resize(regex_t *reg)
{
- resize:
- if (reg->alloc > reg->used) {
+ do {
+ if (!reg->used) {
+ xfree(reg->p);
+ reg->alloc = 0;
+ reg->p = 0;
+ }
+ else if (reg->alloc > reg->used) {
unsigned char *new_ptr = xrealloc(reg->p, reg->used);
// Skip the right size optimization if memory allocation fails
if (new_ptr) {
@@ -151,10 +156,7 @@ onig_reg_resize(regex_t *reg)
reg->p = new_ptr;
}
}
- if (reg->chain) {
- reg = reg->chain;
- goto resize;
- }
+ } while ((reg = reg->chain) != 0);
}
extern int
diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb
index 35d20eeda6..679a013cf0 100644
--- a/test/ruby/test_regexp.rb
+++ b/test/ruby/test_regexp.rb
@@ -1344,6 +1344,15 @@ class TestRegexp < Test::Unit::TestCase
end
end
+ def test_invalid_group
+ assert_separately([], "#{<<-"begin;"}\n#{<<-'end;'}")
+ begin;
+ assert_raise_with_message(RegexpError, /invalid conditional pattern/) do
+ Regexp.new("((?(1)x|x|)x)+")
+ end
+ end;
+ end
+
# This assertion is for porting x2() tests in testpy.py of Onigmo.
def assert_match_at(re, str, positions, msg = nil)
re = Regexp.new(re) unless re.is_a?(Regexp)
diff --git a/version.h b/version.h
index 0538f42411..5aee8a7013 100644
--- a/version.h
+++ b/version.h
@@ -12,7 +12,7 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 4
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
-#define RUBY_PATCHLEVEL 206
+#define RUBY_PATCHLEVEL 207
#define RUBY_RELEASE_YEAR 2022
#define RUBY_RELEASE_MONTH 4