Commit 7fcd26a3 authored by Jeremy Hylton's avatar Jeremy Hylton

Make it an error to compare a bytes object and a Unicode object.

parent 7d0af98a
......@@ -130,12 +130,12 @@ class BytesTest(unittest.TestCase):
self.assertEqual(str8("abc") < b"ab", False)
self.assertEqual(str8("abc") <= b"ab", False)
# Bytes should never compare equal to Unicode!
# Bytes can't be compared to Unicode!
# Test this for all expected byte orders and Unicode character sizes
self.assertEqual(b"\0a\0b\0c" == "abc", False)
self.assertEqual(b"\0\0\0a\0\0\0b\0\0\0c" == "abc", False)
self.assertEqual(b"a\0b\0c\0" == "abc", False)
self.assertEqual(b"a\0\0\0b\0\0\0c\0\0\0" == "abc", False)
self.assertRaises(TypeError, lambda: b"\0a\0b\0c" == "abc")
self.assertRaises(TypeError, lambda: b"\0\0\0a\0\0\0b\0\0\0c" == "abc")
self.assertRaises(TypeError, lambda: b"a\0b\0c\0" == "abc")
self.assertRaises(TypeError, lambda: b"a\0\0\0b\0\0\0c\0\0\0" == "abc")
def test_nohash(self):
self.assertRaises(TypeError, hash, bytes())
......
......@@ -959,8 +959,14 @@ bytes_richcompare(PyObject *self, PyObject *other, int op)
Py_ssize_t minsize;
int cmp;
/* Bytes can be compared to anything that supports the (binary) buffer
API. Except Unicode. */
/* Bytes can be compared to anything that supports the (binary)
buffer API. Except that a comparison with Unicode is always an
error, even if the comparison is for equality. */
if (PyObject_IsInstance(self, (PyObject*)&PyUnicode_Type) ||
PyObject_IsInstance(other, (PyObject*)&PyUnicode_Type)) {
PyErr_SetString(PyExc_TypeError, "can't compare bytes and str");
return NULL;
}
self_size = _getbuffer(self, &self_bytes);
if (self_size < 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment