Skip to content

Commit bf6a37c

Browse files
ashm-devmiss-islington
authored andcommitted
gh-140398: fix memory leaks in readline module when PySys_Audit fails (GH-140400)
(cherry picked from commit e8e0f41) Co-authored-by: Shamil <[email protected]>
1 parent 4215f7f commit bf6a37c

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Fix memory leaks in :mod:`readline` functions
2+
:func:`~readline.read_init_file`, :func:`~readline.read_history_file`,
3+
:func:`~readline.write_history_file`, and
4+
:func:`~readline.append_history_file` when :c:func:`PySys_Audit` fails.

Modules/readline.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ readline_read_init_file_impl(PyObject *module, PyObject *filename_obj)
255255
if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
256256
return NULL;
257257
if (PySys_Audit("open", "OCi", filename_obj, 'r', 0) < 0) {
258+
Py_DECREF(filename_bytes);
258259
return NULL;
259260
}
260261
errno = rl_read_init_file(PyBytes_AS_STRING(filename_bytes));
@@ -298,6 +299,7 @@ readline_read_history_file_impl(PyObject *module, PyObject *filename_obj)
298299
if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
299300
return NULL;
300301
if (PySys_Audit("open", "OCi", filename_obj, 'r', 0) < 0) {
302+
Py_DECREF(filename_bytes);
301303
return NULL;
302304
}
303305
errno = read_history(PyBytes_AS_STRING(filename_bytes));
@@ -343,6 +345,7 @@ readline_write_history_file_impl(PyObject *module, PyObject *filename_obj)
343345
return NULL;
344346
filename = PyBytes_AS_STRING(filename_bytes);
345347
if (PySys_Audit("open", "OCi", filename_obj, 'w', 0) < 0) {
348+
Py_DECREF(filename_bytes);
346349
return NULL;
347350
}
348351
} else {
@@ -400,6 +403,7 @@ readline_append_history_file_impl(PyObject *module, int nelements,
400403
return NULL;
401404
filename = PyBytes_AS_STRING(filename_bytes);
402405
if (PySys_Audit("open", "OCi", filename_obj, 'a', 0) < 0) {
406+
Py_DECREF(filename_bytes);
403407
return NULL;
404408
}
405409
} else {

0 commit comments

Comments
 (0)