From ccb56804fd4a0b6d6d21325c2dd11ef16077eca6 Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Sun, 9 Oct 2022 17:02:39 +0300 Subject: [PATCH] [3.10] gh-94808: Cover `PyObject_PyBytes` case with custom `__bytes__` method (GH-96610) (#98121) Co-authored-by: Jelle Zijlstra . Co-authored-by: Nikita Sobolev (cherry picked from commit e39ae6bef2c357a88e232dcab2e4b4c0f367544b) --- Lib/test/test_long.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index c97842b5bfd2..f8a62077a4fb 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -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 -- 2.47.3