]> granicus.if.org Git - python/commitdiff
Bytes should never equal unicode.
authorGuido van Rossum <guido@python.org>
Mon, 9 Apr 2007 00:49:13 +0000 (00:49 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 9 Apr 2007 00:49:13 +0000 (00:49 +0000)
Add tests for str <cmpop> bytes.

Lib/test/test_bytes.py
Objects/bytesobject.c

index 2999aa6545f8f2d7b596c767bdbc8c7d31252401..e90bceeabc6b4fd79b43dba861fcac1f82744f3e 100644 (file)
@@ -114,6 +114,27 @@ class BytesTest(unittest.TestCase):
         self.assertEqual(b"abc" < "ab", False)
         self.assertEqual(b"abc" <= "ab", False)
 
+        self.assertEqual("abc" == b"abc", True)
+        self.assertEqual("ab" != b"abc", True)
+        self.assertEqual("ab" <= b"abc", True)
+        self.assertEqual("ab" < b"abc", True)
+        self.assertEqual("abc" >= b"ab", True)
+        self.assertEqual("abc" > b"ab", True)
+
+        self.assertEqual("abc" != b"abc", False)
+        self.assertEqual("ab" == b"abc", False)
+        self.assertEqual("ab" > b"abc", False)
+        self.assertEqual("ab" >= b"abc", False)
+        self.assertEqual("abc" < b"ab", False)
+        self.assertEqual("abc" <= b"ab", False)
+
+        # But they should never compare equal to Unicode!
+        # Test this for all expected byte orders and Unicode character sizes
+        self.assertEqual(b"\0a\0b\0c" == u"abc", False)
+        self.assertEqual(b"\0\0\0a\0\0\0b\0\0\0c" == u"abc", False)
+        self.assertEqual(b"a\0b\0c\0" == u"abc", False)
+        self.assertEqual(b"a\0\0\0b\0\0\0c\0\0\0" == u"abc", False)
+
     def test_nohash(self):
         self.assertRaises(TypeError, hash, bytes())
 
index 34f381a7ce77248813606de768ed1344c1885999..d985fc75e36bdfd0b84052df947c540c54a44e1e 100644 (file)
@@ -848,7 +848,12 @@ bytes_richcompare(PyObject *self, PyObject *other, int op)
     int cmp;
 
     /* For backwards compatibility, bytes can be compared to anything that
-       supports the (binary) buffer API. */
+       supports the (binary) buffer API.  Except Unicode. */
+
+    if (PyUnicode_Check(self) || PyUnicode_Check(other)) {
+        Py_INCREF(Py_NotImplemented);
+        return Py_NotImplemented;
+    }
 
     self_buffer = self->ob_type->tp_as_buffer;
     if (self_buffer == NULL ||