diff options
author | Luke Gruber <luke.gru@gmail.com> | 2023-12-30 13:26:59 -0500 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2024-01-01 13:28:26 -0800 |
commit | e12d4c654e3cb7a4473014610bc3bae41aaf811e (patch) | |
tree | 3184f19e8898ca9af24dd5d6ee22afad83fa0530 /re.c | |
parent | 676748abcad62c021fc122d137f177d3c0f0f7a8 (diff) | |
download | ruby-e12d4c654e3cb7a4473014610bc3bae41aaf811e.tar.gz |
Don't create T_MATCH object if /regexp/.match(string) doesn't match
Fixes [Bug #20104]
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -1747,15 +1747,18 @@ rb_reg_search_set_match(VALUE re, VALUE str, long pos, int reverse, int set_back .range = reverse ? 0 : len, }; - VALUE match = match_alloc(rb_cMatch); - struct re_registers *regs = RMATCH_REGS(match); + struct re_registers regs = {0}; - OnigPosition result = rb_reg_onig_match(re, str, reg_onig_search, &args, regs); + OnigPosition result = rb_reg_onig_match(re, str, reg_onig_search, &args, ®s); if (result == ONIG_MISMATCH) { rb_backref_set(Qnil); return ONIG_MISMATCH; } + VALUE match = match_alloc(rb_cMatch); + rb_matchext_t *rm = RMATCH_EXT(match); + rm->regs = regs; + if (set_backref_str) { RB_OBJ_WRITE(match, &RMATCH(match)->str, rb_str_new4(str)); } |