diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-12-20 14:36:34 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-12-20 14:36:34 (GMT) |
commit | 5aac3ed79999f6948d11f979ab3e42b9b60e9083 (patch) | |
tree | b338eac95f23fe5bdebacc996986d43204621ac7 /Objects | |
parent | 5185597a69f1df8c68ba8d42fe39991124863488 (diff) | |
download | cpython-5aac3ed79999f6948d11f979ab3e42b9b60e9083.zip cpython-5aac3ed79999f6948d11f979ab3e42b9b60e9083.tar.gz cpython-5aac3ed79999f6948d11f979ab3e42b9b60e9083.tar.bz2 |
Issue #25766: Special method __bytes__() now works in str subclasses.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/bytesobject.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index 8e09849..d8fb96b 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -3175,11 +3175,11 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return PyBytes_FromStringAndSize(NULL, 0); } - if (PyUnicode_Check(x)) { + if (encoding != NULL) { /* Encode via the codec registry */ - if (encoding == NULL) { + if (!PyUnicode_Check(x)) { PyErr_SetString(PyExc_TypeError, - "string argument without an encoding"); + "encoding without a string argument"); return NULL; } new = PyUnicode_AsEncodedString(x, encoding, errors); @@ -3189,10 +3189,11 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return new; } - /* If it's not unicode, there can't be encoding or errors */ - if (encoding != NULL || errors != NULL) { + if (errors != NULL) { PyErr_SetString(PyExc_TypeError, - "encoding or errors without a string argument"); + PyUnicode_Check(x) ? + "string argument without an encoding" : + "errors without a string argument"); return NULL; } @@ -3217,6 +3218,11 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds) else if (PyErr_Occurred()) return NULL; + if (PyUnicode_Check(x)) { + PyErr_SetString(PyExc_TypeError, + "string argument without an encoding"); + return NULL; + } /* Is it an integer? */ size = PyNumber_AsSsize_t(x, PyExc_OverflowError); if (size == -1 && PyErr_Occurred()) { |