Skip to content

Commit 6b3d4ea

Browse files
[3.13] gh-156099: Fix a crash when deleting SSLContext.keylog_filename (GH-156103) (GH-156150)
The setter did not check the value for NULL and passed it to Py_fopen(). (cherry picked from commit 5ebd486)
1 parent fbf7a06 commit 6b3d4ea

3 files changed

Lines changed: 15 additions & 0 deletions

File tree

Lib/test/test_ssl.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5146,6 +5146,12 @@ def test_keylog_defaults(self):
51465146
with self.assertRaises(TypeError):
51475147
ctx.keylog_filename = 1
51485148

5149+
ctx.keylog_filename = os_helper.TESTFN
5150+
with self.assertRaisesRegex(AttributeError, 'cannot be deleted'):
5151+
del ctx.keylog_filename
5152+
# a failed deletion does not change the value
5153+
self.assertEqual(ctx.keylog_filename, os_helper.TESTFN)
5154+
51495155
@requires_keylog
51505156
def test_keylog_filename(self):
51515157
self.addCleanup(os_helper.unlink, os_helper.TESTFN)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fix a crash when deleting the ``keylog_filename`` attribute of
2+
:class:`ssl.SSLContext`.
3+
It now raises :exc:`AttributeError`.

Modules/_ssl/debughelpers.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,12 @@ static int
166166
_PySSLContext_set_keylog_filename(PySSLContext *self, PyObject *arg, void *c) {
167167
FILE *fp;
168168

169+
if (arg == NULL) {
170+
PyErr_Format(PyExc_AttributeError,
171+
"attribute 'keylog_filename' of '%.100s' objects "
172+
"cannot be deleted", Py_TYPE(self)->tp_name);
173+
return -1;
174+
}
169175
#if defined(MS_WINDOWS) && defined(_DEBUG)
170176
PyErr_SetString(PyExc_NotImplementedError,
171177
"set_keylog_filename: unavailable on Windows debug build");

0 commit comments

Comments
 (0)