Skip to content

Commit

Permalink
gh-87092: fix a few cases of incorrect error handling in compiler (#1…
Browse files Browse the repository at this point in the history
…03456)

gh-87092: fix a few cases of incorrect error handling
  • Loading branch information
iritkatriel authored Apr 24, 2023
1 parent cb157a1 commit 6751a4a
Showing 1 changed file with 23 additions and 9 deletions.
32 changes: 23 additions & 9 deletions Python/compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -6688,7 +6688,10 @@ insert_prefix_instructions(struct compiler_unit *u, basicblock *entryblock,
.i_loc = NO_LOCATION,
.i_target = NULL,
};
RETURN_IF_ERROR(_PyBasicblock_InsertInstruction(entryblock, ncellsused, &make_cell));
if (_PyBasicblock_InsertInstruction(entryblock, ncellsused, &make_cell) < 0) {
PyMem_RawFree(sorted);
return ERROR;
}
ncellsused += 1;
}
PyMem_RawFree(sorted);
Expand Down Expand Up @@ -6860,7 +6863,7 @@ optimize_and_assemble_code_unit(struct compiler_unit *u, PyObject *const_cache,
maxdepth, g.g_entryblock, nlocalsplus,
code_flags, filename);

error:
error:
Py_XDECREF(consts);
instr_sequence_fini(&optimized_instrs);
_PyCfgBuilder_Fini(&g);
Expand Down Expand Up @@ -6958,7 +6961,9 @@ instructions_to_instr_sequence(PyObject *instructions, instr_sequence *seq)

for (int i = 0; i < num_insts; i++) {
if (is_target[i]) {
RETURN_IF_ERROR(instr_sequence_use_label(seq, i));
if (instr_sequence_use_label(seq, i) < 0) {
goto error;
}
}
PyObject *item = PyList_GET_ITEM(instructions, i);
if (!PyTuple_Check(item) || PyTuple_GET_SIZE(item) != 6) {
Expand Down Expand Up @@ -6996,10 +7001,14 @@ instructions_to_instr_sequence(PyObject *instructions, instr_sequence *seq)
if (PyErr_Occurred()) {
goto error;
}
RETURN_IF_ERROR(instr_sequence_addop(seq, opcode, oparg, loc));
if (instr_sequence_addop(seq, opcode, oparg, loc) < 0) {
goto error;
}
}
if (seq->s_used && !IS_TERMINATOR_OPCODE(seq->s_instrs[seq->s_used-1].i_opcode)) {
RETURN_IF_ERROR(instr_sequence_addop(seq, RETURN_VALUE, 0, NO_LOCATION));
if (instr_sequence_addop(seq, RETURN_VALUE, 0, NO_LOCATION) < 0) {
goto error;
}
}
PyMem_Free(is_target);
return SUCCESS;
Expand All @@ -7014,12 +7023,17 @@ instructions_to_cfg(PyObject *instructions, cfg_builder *g)
instr_sequence seq;
memset(&seq, 0, sizeof(instr_sequence));

RETURN_IF_ERROR(
instructions_to_instr_sequence(instructions, &seq));

RETURN_IF_ERROR(instr_sequence_to_cfg(&seq, g));
if (instructions_to_instr_sequence(instructions, &seq) < 0) {
goto error;
}
if (instr_sequence_to_cfg(&seq, g) < 0) {
goto error;
}
instr_sequence_fini(&seq);
return SUCCESS;
error:
instr_sequence_fini(&seq);
return ERROR;
}

static PyObject *
Expand Down

0 comments on commit 6751a4a

Please sign in to comment.