◐ Shell
clean mode source ↗

[3.10] gh-99240: Reset pointer to NULL when the pointed memory is freed in argument parsing (GH-99890) by colorfulappl · Pull Request #100386 · python/cpython

Expand Up @@ -5671,6 +5671,7 @@ test_fatal_error(PyObject *self, PyObject *args) static PyObject *test_buildvalue_issue38913(PyObject *, PyObject *); static PyObject *getargs_s_hash_int(PyObject *, PyObject *, PyObject*); static PyObject *getargs_s_hash_int2(PyObject *, PyObject *, PyObject*); static PyObject *gh_99240_clear_args(PyObject *, PyObject *);
static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, Expand Down Expand Up @@ -5784,6 +5785,7 @@ static PyMethodDef TestMethods[] = { METH_VARARGS|METH_KEYWORDS}, {"getargs_s_hash_int2", (PyCFunction)(void(*)(void))getargs_s_hash_int2, METH_VARARGS|METH_KEYWORDS}, {"gh_99240_clear_args", gh_99240_clear_args, METH_VARARGS}, {"getargs_z", getargs_z, METH_VARARGS}, {"getargs_z_star", getargs_z_star, METH_VARARGS}, {"getargs_z_hash", getargs_z_hash, METH_VARARGS}, Expand Down Expand Up @@ -7500,3 +7502,21 @@ getargs_s_hash_int2(PyObject *self, PyObject *args, PyObject *kwargs) PyBuffer_Release(&buf); Py_RETURN_NONE; }
static PyObject * gh_99240_clear_args(PyObject *self, PyObject *args) { char *a = NULL; char *b = NULL;
if (!PyArg_ParseTuple(args, "eses", "idna", &a, "idna", &b)) { if (a || b) { PyErr_Clear(); PyErr_SetString(PyExc_AssertionError, "Arguments are not cleared."); } return NULL; } PyMem_Free(a); PyMem_Free(b); Py_RETURN_NONE; }