From b05352e4c2f25b292fb7de0ab927e74415bc2dd8 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 3 May 2021 16:11:35 -0700 Subject: bpo-44018: random.seed() no longer mutates its inputs (GH-25856) --- Lib/random.py | 3 +-- Lib/test/test_random.py | 5 +++++ Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst diff --git a/Lib/random.py b/Lib/random.py index 3a835ae..1310a2d 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -154,8 +154,7 @@ class Random(_random.Random): elif version == 2 and isinstance(a, (str, bytes, bytearray)): if isinstance(a, str): a = a.encode() - a += _sha512(a).digest() - a = int.from_bytes(a, 'big') + a = int.from_bytes(a + _sha512(a).digest(), 'big') elif not isinstance(a, (type(None), int, float, str, bytes, bytearray)): _warn('Seeding based on hashing is deprecated\n' diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 6690886..5354edd 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -57,6 +57,11 @@ class TestBasicOps: self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4) self.assertRaises(TypeError, type(self.gen), []) + def test_seed_no_mutate_bug_44018(self): + a = bytearray(b'1234') + self.gen.seed(a) + self.assertEqual(a, bytearray(b'1234')) + @unittest.mock.patch('random._urandom') # os.urandom def test_seed_when_randomness_source_not_found(self, urandom_mock): # Random.seed() uses time.time() when an operating system specific diff --git a/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst b/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst new file mode 100644 index 0000000..87c7d83 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst @@ -0,0 +1 @@ +random.seed() no longer mutates bytearray inputs. -- cgit v0.12