Mercurial > cpython-lru_cache-weakref
diff Modules/main.c @ 75142:0e8bd4785ea0 3.2
Fix test failure in test_cmd_line by initializing the hash secret at the earliest point.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Tue, 21 Feb 2012 19:03:47 +0100 |
| parents | 4a31f6b11e7a |
| children | e832ffd0388f 88aede44ded1 |
line wrap: on
line diff
--- a/Modules/main.c Tue Feb 21 18:06:22 2012 +0100 +++ b/Modules/main.c Tue Feb 21 19:03:47 2012 +0100 @@ -337,7 +337,33 @@ orig_argc = argc; /* For Py_GetArgcArgv() */ orig_argv = argv; + /* Hash randomization needed early for all string operations + (including -W and -X options). */ + while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { + if (c == 'm' || c == 'c') { + /* -c / -m is the last option: following arguments are + not interpreter options. */ + break; + } + switch (c) { + case 'E': + Py_IgnoreEnvironmentFlag++; + break; + case 'R': + Py_HashRandomizationFlag++; + break; + } + } + /* The variable is only tested for existence here; _PyRandom_Init will + check its value further. */ + if (!Py_HashRandomizationFlag && + (p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0') + Py_HashRandomizationFlag = 1; + + _PyRandom_Init(); + PySys_ResetWarnOptions(); + _PyOS_ResetGetOpt(); while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { if (c == 'c') { @@ -398,7 +424,7 @@ break; case 'E': - Py_IgnoreEnvironmentFlag++; + /* Already handled above */ break; case 't': @@ -440,7 +466,7 @@ break; case 'R': - Py_HashRandomizationFlag++; + /* Already handled above */ break; /* This space reserved for other options */
