diff options
author | Alan Wu <[email protected]> | 2021-07-26 20:17:49 -0400 |
---|---|---|
committer | Alan Wu <[email protected]> | 2021-10-20 18:19:38 -0400 |
commit | 8cf01dd25c126cf19b9146b71992b53c4541382e (patch) | |
tree | ba30da157da5d301633b8a647ce0a07cdc98688f /compile.c | |
parent | 641ef34ddec2f8dd9af951f419fb084befea8175 (diff) |
Revert "Fix use-after-free on USE_EMBED_CI=0"
This reverts commit 1e0f2e4b09ca9443524acf4b50ffd50a80f330f3.
Diffstat (limited to 'compile.c')
-rw-r--r-- | compile.c | 19 |
1 files changed, 7 insertions, 12 deletions
@@ -3452,20 +3452,15 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal static int insn_set_specialized_instruction(rb_iseq_t *iseq, INSN *iobj, int insn_id) { - if (insn_id == BIN(opt_neq)) { - // Be careful to not write to iobj before allocating so the old operand stays alive. - VALUE original_ci = iobj->operands[0]; - VALUE *new_operands = compile_data_calloc2(iseq, 2, sizeof(VALUE)); - new_operands[0] = (VALUE)new_callinfo(iseq, idEq, 1, 0, NULL, FALSE); - new_operands[1] = original_ci; + iobj->insn_id = insn_id; + iobj->operand_size = insn_len(insn_id) - 1; - iobj->insn_id = insn_id; + if (insn_id == BIN(opt_neq)) { + VALUE *old_operands = iobj->operands; iobj->operand_size = 2; - iobj->operands = new_operands; - } - else { - iobj->insn_id = insn_id; - iobj->operand_size = insn_len(insn_id) - 1; + iobj->operands = compile_data_calloc2(iseq, iobj->operand_size, sizeof(VALUE)); + iobj->operands[0] = (VALUE)new_callinfo(iseq, idEq, 1, 0, NULL, FALSE); + iobj->operands[1] = old_operands[0]; } return COMPILE_OK; |