Commit 86838b02 authored by Antoine Pitrou's avatar Antoine Pitrou

Fix test failure in test_cmd_line by initializing the hash secret at the earliest point.

parent dbd3f617
...@@ -9,6 +9,8 @@ extern "C" { ...@@ -9,6 +9,8 @@ extern "C" {
PyAPI_DATA(int) _PyOS_opterr; PyAPI_DATA(int) _PyOS_opterr;
PyAPI_DATA(int) _PyOS_optind; PyAPI_DATA(int) _PyOS_optind;
PyAPI_DATA(wchar_t *) _PyOS_optarg; PyAPI_DATA(wchar_t *) _PyOS_optarg;
PyAPI_FUNC(void) _PyOS_ResetGetOpt(void);
#endif #endif
PyAPI_FUNC(int) _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring); PyAPI_FUNC(int) _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring);
......
...@@ -196,6 +196,7 @@ PyAPI_FUNC(void) _PyImportHooks_Init(void); ...@@ -196,6 +196,7 @@ PyAPI_FUNC(void) _PyImportHooks_Init(void);
PyAPI_FUNC(int) _PyFrame_Init(void); PyAPI_FUNC(int) _PyFrame_Init(void);
PyAPI_FUNC(void) _PyFloat_Init(void); PyAPI_FUNC(void) _PyFloat_Init(void);
PyAPI_FUNC(int) PyByteArray_Init(void); PyAPI_FUNC(int) PyByteArray_Init(void);
PyAPI_FUNC(void) _PyRandom_Init(void);
#endif #endif
/* Various internal finalizers */ /* Various internal finalizers */
......
...@@ -337,7 +337,33 @@ Py_Main(int argc, wchar_t **argv) ...@@ -337,7 +337,33 @@ Py_Main(int argc, wchar_t **argv)
orig_argc = argc; /* For Py_GetArgcArgv() */ orig_argc = argc; /* For Py_GetArgcArgv() */
orig_argv = argv; 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(); PySys_ResetWarnOptions();
_PyOS_ResetGetOpt();
while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) {
if (c == 'c') { if (c == 'c') {
...@@ -398,7 +424,7 @@ Py_Main(int argc, wchar_t **argv) ...@@ -398,7 +424,7 @@ Py_Main(int argc, wchar_t **argv)
break; break;
case 'E': case 'E':
Py_IgnoreEnvironmentFlag++; /* Already handled above */
break; break;
case 't': case 't':
...@@ -440,7 +466,7 @@ Py_Main(int argc, wchar_t **argv) ...@@ -440,7 +466,7 @@ Py_Main(int argc, wchar_t **argv)
break; break;
case 'R': case 'R':
Py_HashRandomizationFlag++; /* Already handled above */
break; break;
/* This space reserved for other options */ /* This space reserved for other options */
......
...@@ -41,9 +41,18 @@ int _PyOS_opterr = 1; /* generate error messages */ ...@@ -41,9 +41,18 @@ int _PyOS_opterr = 1; /* generate error messages */
int _PyOS_optind = 1; /* index into argv array */ int _PyOS_optind = 1; /* index into argv array */
wchar_t *_PyOS_optarg = NULL; /* optional argument */ wchar_t *_PyOS_optarg = NULL; /* optional argument */
static wchar_t *opt_ptr = L"";
void _PyOS_ResetGetOpt(void)
{
_PyOS_opterr = 1;
_PyOS_optind = 1;
_PyOS_optarg = NULL;
opt_ptr = L"";
}
int _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring) int _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring)
{ {
static wchar_t *opt_ptr = L"";
wchar_t *ptr; wchar_t *ptr;
wchar_t option; wchar_t option;
......
...@@ -70,7 +70,6 @@ extern void _PyUnicode_Init(void); ...@@ -70,7 +70,6 @@ extern void _PyUnicode_Init(void);
extern void _PyUnicode_Fini(void); extern void _PyUnicode_Fini(void);
extern int _PyLong_Init(void); extern int _PyLong_Init(void);
extern void PyLong_Fini(void); extern void PyLong_Fini(void);
extern void _PyRandom_Init(void);
#ifdef WITH_THREAD #ifdef WITH_THREAD
extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *); extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment