1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Right size literal regular expression buffers on compile

This commit is contained in:
Lourens Naudé 2019-11-26 13:07:49 +00:00 committed by Nobuyoshi Nakada
parent e7433a3288
commit 9a17437558
Notes: git 2020-12-10 18:15:51 +09:00

View file

@ -138,6 +138,25 @@ bitset_on_num(BitSetRef bs)
}
#endif
// Attempt to right size allocated buffers for a regex post compile
static void
onig_reg_resize(regex_t *reg)
{
resize:
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) {
reg->alloc = reg->used;
reg->p = new_ptr;
}
}
if (reg->chain) {
reg = reg->chain;
goto resize;
}
}
extern int
onig_bbuf_init(BBuf* buf, OnigDistance size)
{
@ -5886,6 +5905,7 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
#endif
end:
onig_reg_resize(reg);
return r;
err_unset: