]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.10] gh-94808: Cover `PyObject_PyBytes` case with custom `__bytes__` method (GH...
authorNikita Sobolev <mail@sobolevn.me>
Sun, 9 Oct 2022 14:02:39 +0000 (17:02 +0300)
committerGitHub <noreply@github.com>
Sun, 9 Oct 2022 14:02:39 +0000 (07:02 -0700)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>.
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
(cherry picked from commit e39ae6bef2c357a88e232dcab2e4b4c0f367544b)

Lib/test/test_long.py

index c97842b5bfd233885270fe7086109e840ed1d761..f8a62077a4fb8f9ddd0764e03182ec73686d8ce0 100644 (file)
@@ -1350,6 +1350,26 @@ class LongTest(unittest.TestCase):
         self.assertEqual(i, 1)
         self.assertEqual(getattr(i, 'foo', 'none'), 'bar')
 
+        class ValidBytes:
+            def __bytes__(self):
+                return b'\x01'
+        class InvalidBytes:
+            def __bytes__(self):
+                return 'abc'
+        class MissingBytes: ...
+        class RaisingBytes:
+            def __bytes__(self):
+                1 / 0
+
+        for byte_order in ('big', 'little'):
+            self.assertEqual(int.from_bytes(ValidBytes(), byte_order), 1)
+            self.assertRaises(
+                TypeError, int.from_bytes, InvalidBytes(), byte_order)
+            self.assertRaises(
+                TypeError, int.from_bytes, MissingBytes(), byte_order)
+            self.assertRaises(
+                ZeroDivisionError, int.from_bytes, RaisingBytes(), byte_order)
+
     def test_access_to_nonexistent_digit_0(self):
         # http://bugs.python.org/issue14630: A bug in _PyLong_Copy meant that
         # ob_digit[0] was being incorrectly accessed for instances of a