diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-11-25 13:47:01 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-11-25 13:47:01 (GMT) |
commit | 15095800a381a396cbc077cb5320203a8feae51a (patch) | |
tree | ba1f16c1b9be09a1f14d3af644c39e52924ee63f /Objects | |
parent | a49de6be3669e4698ea55d22e0fdebb29be63f2e (diff) | |
download | cpython-15095800a381a396cbc077cb5320203a8feae51a.zip cpython-15095800a381a396cbc077cb5320203a8feae51a.tar.gz cpython-15095800a381a396cbc077cb5320203a8feae51a.tar.bz2 |
Issue #24731: Fixed crash on converting objects with special methods
__bytes__, __trunc__, and __float__ returning instances of subclasses of
bytes, int, and float to subclasses of bytes, int, and float correspondingly.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/bytesobject.c | 8 | ||||
-rw-r--r-- | Objects/floatobject.c | 2 | ||||
-rw-r--r-- | Objects/longobject.c | 2 |
3 files changed, 6 insertions, 6 deletions
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index 5768154..27f4069 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -2445,7 +2445,7 @@ bytes_methods[] = { }; static PyObject * -str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds); +bytes_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds); static PyObject * bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds) @@ -2460,7 +2460,7 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds) _Py_IDENTIFIER(__bytes__); if (type != &PyBytes_Type) - return str_subtype_new(type, args, kwds); + return bytes_subtype_new(type, args, kwds); if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oss:bytes", kwlist, &x, &encoding, &errors)) return NULL; @@ -2687,7 +2687,7 @@ PyBytes_FromObject(PyObject *x) } static PyObject * -str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +bytes_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { PyObject *tmp, *pnew; Py_ssize_t n; @@ -2696,7 +2696,7 @@ str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds) tmp = bytes_new(&PyBytes_Type, args, kwds); if (tmp == NULL) return NULL; - assert(PyBytes_CheckExact(tmp)); + assert(PyBytes_Check(tmp)); n = PyBytes_GET_SIZE(tmp); pnew = type->tp_alloc(type, n); if (pnew != NULL) { diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 9c1b714..acd88d6 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -1567,7 +1567,7 @@ float_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds) tmp = float_new(&PyFloat_Type, args, kwds); if (tmp == NULL) return NULL; - assert(PyFloat_CheckExact(tmp)); + assert(PyFloat_Check(tmp)); newobj = type->tp_alloc(type, 0); if (newobj == NULL) { Py_DECREF(tmp); diff --git a/Objects/longobject.c b/Objects/longobject.c index 7036c0e..3a64b53 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -4405,7 +4405,7 @@ long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds) tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds); if (tmp == NULL) return NULL; - assert(PyLong_CheckExact(tmp)); + assert(PyLong_Check(tmp)); n = Py_SIZE(tmp); if (n < 0) n = -n; |