summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2007-08-29 18:47:16 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2007-08-29 18:47:16 (GMT)
commit18c3ff887f95e7b566b36faf97d457372c04c213 (patch)
treed2d1242b8c7eca59638696b43b95004f64384e3e
parent991bf5d8c8fdd94c3b9238d7111c0dfb41973804 (diff)
downloadcpython-18c3ff887f95e7b566b36faf97d457372c04c213.zip
cpython-18c3ff887f95e7b566b36faf97d457372c04c213.tar.gz
cpython-18c3ff887f95e7b566b36faf97d457372c04c213.tar.bz2
Make it an error to compare a bytes object and a Unicode object.
-rw-r--r--Lib/test/test_bytes.py10
-rw-r--r--Objects/bytesobject.c10
2 files changed, 13 insertions, 7 deletions
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index b7e6800..1c161bb 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -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())
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index b267cac..c132692 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -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) {