From e72a25bb7a10a258c6b91c072cbc112ef921d151 Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Fri, 3 Sep 2021 11:40:46 -0700 Subject: [PATCH] Handle different string hash algorithms correctly --- Lib/test/test_marshal.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py index bdfe79fbbecb35..8d55382b195a18 100644 --- a/Lib/test/test_marshal.py +++ b/Lib/test/test_marshal.py @@ -352,17 +352,20 @@ def test_deterministic_sets(self): for elements in ( "float('nan'), b'a', b'b', b'c', 'x', 'y', 'z'", # Also test for bad interactions with backreferencing: - "('string', 1), ('string', 2), ('string', 3)", + "('Spam', 0), ('Spam', 1), ('Spam', 2)", ): s = f"{kind}([{elements}])" with self.subTest(s): # First, make sure that our test case still has different # orders under hash seeds 0 and 1. If this check fails, we - # need to update this test with different elements: - args = ["-c", f"print({s})"] - _, repr_0, _ = assert_python_ok(*args, PYTHONHASHSEED="0") - _, repr_1, _ = assert_python_ok(*args, PYTHONHASHSEED="1") - self.assertNotEqual(repr_0, repr_1) + # need to update this test with different elements. Skip + # this part if we are configured to use any other hash + # algorithm (for example, using Py_HASH_EXTERNAL): + if sys.hash_info.algorithm in {"fnv", "siphash24"}: + args = ["-c", f"print({s})"] + _, repr_0, _ = assert_python_ok(*args, PYTHONHASHSEED="0") + _, repr_1, _ = assert_python_ok(*args, PYTHONHASHSEED="1") + self.assertNotEqual(repr_0, repr_1) # Then, perform the actual test: args = ["-c", f"import marshal; print(marshal.dumps({s}))"] _, dump_0, _ = assert_python_ok(*args, PYTHONHASHSEED="0")