diff options
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/object.c | 8 | ||||
-rw-r--r-- | Objects/stringobject.c | 2 |
2 files changed, 8 insertions, 2 deletions
diff --git a/Objects/object.c b/Objects/object.c index 704ffc13b2..718dddf7cf 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -250,10 +250,16 @@ PyObject_Str(PyObject *v) if (v == NULL) return PyString_FromString("<NULL>"); - if (PyString_Check(v)) { + if (PyString_CheckExact(v)) { Py_INCREF(v); return v; } + if (PyString_Check(v)) { + /* For a string subtype that's not a string, return a true + string with the same string data. */ + PyStringObject *s = (PyStringObject *)v; + return PyString_FromStringAndSize(s->ob_sval, s->ob_size); + } if (v->ob_type->tp_str == NULL) return PyObject_Repr(v); diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 4c28500962..9c873ecc89 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -2711,7 +2711,7 @@ str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds) tmp = string_new(&PyString_Type, args, kwds); if (tmp == NULL) return NULL; - assert(PyString_Check(tmp)); + assert(PyString_CheckExact(tmp)); new = type->tp_alloc(type, n = PyString_GET_SIZE(tmp)); if (new != NULL) memcpy(PyString_AS_STRING(new), PyString_AS_STRING(tmp), n+1); |