Revert "Fix use-after-free on USE_EMBED_CI=0"
This reverts commit 1e0f2e4b09ca9443524acf4b50ffd50a80f330f3.
This commit is contained in:
parent
641ef34dde
commit
8cf01dd25c
19
compile.c
19
compile.c
@ -3452,20 +3452,15 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
|
|||||||
static int
|
static int
|
||||||
insn_set_specialized_instruction(rb_iseq_t *iseq, INSN *iobj, int insn_id)
|
insn_set_specialized_instruction(rb_iseq_t *iseq, INSN *iobj, int insn_id)
|
||||||
{
|
{
|
||||||
if (insn_id == BIN(opt_neq)) {
|
iobj->insn_id = insn_id;
|
||||||
// Be careful to not write to iobj before allocating so the old operand stays alive.
|
iobj->operand_size = insn_len(insn_id) - 1;
|
||||||
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;
|
if (insn_id == BIN(opt_neq)) {
|
||||||
|
VALUE *old_operands = iobj->operands;
|
||||||
iobj->operand_size = 2;
|
iobj->operand_size = 2;
|
||||||
iobj->operands = new_operands;
|
iobj->operands = compile_data_calloc2(iseq, iobj->operand_size, sizeof(VALUE));
|
||||||
}
|
iobj->operands[0] = (VALUE)new_callinfo(iseq, idEq, 1, 0, NULL, FALSE);
|
||||||
else {
|
iobj->operands[1] = old_operands[0];
|
||||||
iobj->insn_id = insn_id;
|
|
||||||
iobj->operand_size = insn_len(insn_id) - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return COMPILE_OK;
|
return COMPILE_OK;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user