mirror of
https://github.com/python/cpython.git
synced 2025-10-01 04:42:10 +00:00
bpo-32329: Fix sys.flags.hash_randomization (#4875)
sys.flags.hash_randomization is now properly set to 0 when hash randomization is turned off by PYTHONHASHSEED=0.
This commit is contained in:
parent
d1cb1067a8
commit
22097aaa77
5 changed files with 12 additions and 7 deletions
|
@ -426,10 +426,15 @@ class CmdLineTest(unittest.TestCase):
|
||||||
|
|
||||||
# Verify that sys.flags contains hash_randomization
|
# Verify that sys.flags contains hash_randomization
|
||||||
code = 'import sys; print("random is", sys.flags.hash_randomization)'
|
code = 'import sys; print("random is", sys.flags.hash_randomization)'
|
||||||
rc, out, err = assert_python_ok('-c', code)
|
rc, out, err = assert_python_ok('-c', code, PYTHONHASHSEED='')
|
||||||
self.assertEqual(rc, 0)
|
|
||||||
self.assertIn(b'random is 1', out)
|
self.assertIn(b'random is 1', out)
|
||||||
|
|
||||||
|
rc, out, err = assert_python_ok('-c', code, PYTHONHASHSEED='random')
|
||||||
|
self.assertIn(b'random is 1', out)
|
||||||
|
|
||||||
|
rc, out, err = assert_python_ok('-c', code, PYTHONHASHSEED='0')
|
||||||
|
self.assertIn(b'random is 0', out)
|
||||||
|
|
||||||
def test_del___main__(self):
|
def test_del___main__(self):
|
||||||
# Issue #15001: PyRun_SimpleFileExFlags() did crash because it kept a
|
# Issue #15001: PyRun_SimpleFileExFlags() did crash because it kept a
|
||||||
# borrowed reference to the dict of __main__ module and later modify
|
# borrowed reference to the dict of __main__ module and later modify
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
``sys.flags.hash_randomization`` is now properly set to 0 when hash
|
||||||
|
randomization is turned off by ``PYTHONHASHSEED=0``.
|
|
@ -394,7 +394,6 @@ Py_Main(int argc, wchar_t **argv)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_HashRandomizationFlag = 1;
|
|
||||||
_PyRandom_Init();
|
_PyRandom_Init();
|
||||||
|
|
||||||
PySys_ResetWarnOptions();
|
PySys_ResetWarnOptions();
|
||||||
|
|
|
@ -330,10 +330,6 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib)
|
||||||
Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
|
Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
|
||||||
if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
|
if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
|
||||||
Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
|
Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
|
||||||
/* The variable is only tested for existence here; _PyRandom_Init will
|
|
||||||
check its value further. */
|
|
||||||
if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0')
|
|
||||||
Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p);
|
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
if ((p = Py_GETENV("PYTHONLEGACYWINDOWSFSENCODING")) && *p != '\0')
|
if ((p = Py_GETENV("PYTHONLEGACYWINDOWSFSENCODING")) && *p != '\0')
|
||||||
Py_LegacyWindowsFSEncodingFlag = add_flag(Py_LegacyWindowsFSEncodingFlag, p);
|
Py_LegacyWindowsFSEncodingFlag = add_flag(Py_LegacyWindowsFSEncodingFlag, p);
|
||||||
|
|
|
@ -565,9 +565,11 @@ _PyRandom_Init(void)
|
||||||
if (seed == 0) {
|
if (seed == 0) {
|
||||||
/* disable the randomized hash */
|
/* disable the randomized hash */
|
||||||
memset(secret, 0, secret_size);
|
memset(secret, 0, secret_size);
|
||||||
|
Py_HashRandomizationFlag = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lcg_urandom(seed, secret, secret_size);
|
lcg_urandom(seed, secret, secret_size);
|
||||||
|
Py_HashRandomizationFlag = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -582,6 +584,7 @@ _PyRandom_Init(void)
|
||||||
if (res < 0) {
|
if (res < 0) {
|
||||||
Py_FatalError("failed to get random numbers to initialize Python");
|
Py_FatalError("failed to get random numbers to initialize Python");
|
||||||
}
|
}
|
||||||
|
Py_HashRandomizationFlag = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue