mirror of https://github.com/python/cpython.git
null merge
This commit is contained in:
commit
41f9d04e06
|
@ -29,6 +29,10 @@ class SubOSErrorCombinedInitFirst(SubOSErrorWithInit, SubOSErrorWithNew):
|
|||
class SubOSErrorCombinedNewFirst(SubOSErrorWithNew, SubOSErrorWithInit):
|
||||
pass
|
||||
|
||||
class SubOSErrorWithStandaloneInit(OSError):
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
|
||||
class HierarchyTest(unittest.TestCase):
|
||||
|
||||
|
@ -193,6 +197,12 @@ def test_init_new_overriden(self):
|
|||
self.assertEqual(e.baz, "baz")
|
||||
self.assertEqual(e.args, ("some message",))
|
||||
|
||||
def test_init_standalone(self):
|
||||
# __init__ doesn't propagate to OSError.__init__ (see issue #15229)
|
||||
e = SubOSErrorWithStandaloneInit()
|
||||
self.assertEqual(e.args, ())
|
||||
self.assertEqual(str(e), '')
|
||||
|
||||
|
||||
def test_main():
|
||||
support.run_unittest(__name__)
|
||||
|
|
|
@ -10,6 +10,9 @@ What's New in Python 3.3.0 Beta 2?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #15229: An OSError subclass whose __init__ doesn't call back
|
||||
OSError.__init__ could produce incomplete instances, leading to crashes
|
||||
when calling str() on them.
|
||||
|
||||
Library
|
||||
-------
|
||||
|
|
|
@ -834,6 +834,7 @@ oserror_init(PyOSErrorObject *self, PyObject **p_args,
|
|||
#endif
|
||||
|
||||
/* Steals the reference to args */
|
||||
Py_CLEAR(self->args);
|
||||
self->args = args;
|
||||
args = NULL;
|
||||
|
||||
|
@ -916,6 +917,11 @@ OSError_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
))
|
||||
goto error;
|
||||
}
|
||||
else {
|
||||
self->args = PyTuple_New(0);
|
||||
if (self->args == NULL)
|
||||
goto error;
|
||||
}
|
||||
|
||||
return (PyObject *) self;
|
||||
|
||||
|
|
Loading…
Reference in New Issue