Just free compiled pattern if no space is used

This commit is contained in:
nagachika 2022-04-12 20:07:08 +09:00
parent 47c3f31fd9
commit 052ec6d258
3 changed files with 18 additions and 7 deletions

View File

@ -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

View File

@ -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)

View File

@ -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