diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-06-11 00:06:43 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-04-12 20:24:14 +0900 |
commit | cf2bbcfff2985c116552967c7c4522f4630f2d18 (patch) | |
tree | 5c1d9427852cdb2c6eff34917b7e4ca277c26790 /regcomp.c | |
parent | 48ffa2804431ea24fa7a3b6f5470122b0128ba22 (diff) | |
download | ruby-cf2bbcfff2985c116552967c7c4522f4630f2d18.tar.gz |
Just free compiled pattern if no space is used
https://hackerone.com/reports/1220911
Diffstat (limited to 'regcomp.c')
-rw-r--r-- | regcomp.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -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 |