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 #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 extern int
onig_bbuf_init(BBuf* buf, OnigDistance size) onig_bbuf_init(BBuf* buf, OnigDistance size)
{ {
@ -5886,6 +5905,7 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
#endif #endif
end: end:
onig_reg_resize(reg);
return r; return r;
err_unset: err_unset: