Skip to content

Commit 22c45c4

Browse files
[3.12] gh-103295: fix stack overwrite on 32-bit in perf map test harness (GH-104811) (#104823)
gh-103295: fix stack overwrite on 32-bit in perf map test harness (GH-104811) (cherry picked from commit e0b3078) Co-authored-by: Carl Meyer <carl@oddbird.net>
1 parent 5c8418c commit 22c45c4

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

Modules/_testinternalcapi.c

+9-4
Original file line numberDiff line numberDiff line change
@@ -762,19 +762,24 @@ clear_extension(PyObject *self, PyObject *args)
762762
static PyObject *
763763
write_perf_map_entry(PyObject *self, PyObject *args)
764764
{
765+
PyObject *code_addr_v;
765766
const void *code_addr;
766767
unsigned int code_size;
767768
const char *entry_name;
768769

769-
if (!PyArg_ParseTuple(args, "KIs", &code_addr, &code_size, &entry_name))
770+
if (!PyArg_ParseTuple(args, "OIs", &code_addr_v, &code_size, &entry_name))
770771
return NULL;
772+
code_addr = PyLong_AsVoidPtr(code_addr_v);
773+
if (code_addr == NULL) {
774+
return NULL;
775+
}
771776

772777
int ret = PyUnstable_WritePerfMapEntry(code_addr, code_size, entry_name);
773-
if (ret == -1) {
774-
PyErr_SetString(PyExc_OSError, "Failed to write performance map entry");
778+
if (ret < 0) {
779+
PyErr_SetFromErrno(PyExc_OSError);
775780
return NULL;
776781
}
777-
return Py_BuildValue("i", ret);
782+
return PyLong_FromLong(ret);
778783
}
779784

780785
static PyObject *

0 commit comments

Comments
 (0)