]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Handle different string hash algorithms correctly (#28147)
authorBrandt Bucher <brandt@python.org>
Sat, 4 Sep 2021 14:14:27 +0000 (07:14 -0700)
committerGitHub <noreply@github.com>
Sat, 4 Sep 2021 14:14:27 +0000 (07:14 -0700)
Lib/test/test_marshal.py

index bdfe79fbbecb35989180066eeb3f8709f8242be8..8d55382b195a18c7555728d4b2c4041883ff2d53 100644 (file)
@@ -352,17 +352,20 @@ class BugsTestCase(unittest.TestCase):
             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")