Browse Source

bpo-35504: Fix a SystemError when delete the characters_written attribute of an OSError. (GH-11172)

pull/11203/head
Serhiy Storchaka 7 years ago
committed by GitHub
parent
commit
e2af34fcf8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      Lib/test/test_exception_hierarchy.py
  2. 1
      Misc/NEWS.d/next/Core and Builtins/2018-12-15-00-47-41.bpo-35504.9gVuen.rst
  3. 8
      Objects/exceptions.c

5
Lib/test/test_exception_hierarchy.py

@ -150,10 +150,15 @@ class AttributesTest(unittest.TestCase):
e = BlockingIOError(*args[:n])
with self.assertRaises(AttributeError):
e.characters_written
with self.assertRaises(AttributeError):
del e.characters_written
e = BlockingIOError("a", "b", 3)
self.assertEqual(e.characters_written, 3)
e.characters_written = 5
self.assertEqual(e.characters_written, 5)
del e.characters_written
with self.assertRaises(AttributeError):
e.characters_written
class ExplicitSubclassingTest(unittest.TestCase):

1
Misc/NEWS.d/next/Core and Builtins/2018-12-15-00-47-41.bpo-35504.9gVuen.rst

@ -0,0 +1 @@
Fixed a SystemError when delete the characters_written attribute of an OSError.

8
Objects/exceptions.c

@ -1196,6 +1196,14 @@ OSError_written_get(PyOSErrorObject *self, void *context)
static int
OSError_written_set(PyOSErrorObject *self, PyObject *arg, void *context)
{
if (arg == NULL) {
if (self->written == -1) {
PyErr_SetString(PyExc_AttributeError, "characters_written");
return -1;
}
self->written = -1;
return 0;
}
Py_ssize_t n;
n = PyNumber_AsSsize_t(arg, PyExc_ValueError);
if (n == -1 && PyErr_Occurred())

Loading…
Cancel
Save