Mercurial > cpython-lru_cache-weakref
comparison Python/pythonrun.c @ 75100:6b7704fe1be1 2.6
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
environment variable, to provide an opt-in way to protect against denial of
service attacks due to hash collisions within the dict and set types. Patch
by David Malcolm, based on work by Victor Stinner.
| author | Barry Warsaw <barry@python.org> |
|---|---|
| date | Mon, 20 Feb 2012 20:42:21 -0500 |
| parents | 787b969d37f0 |
| children | 76d72e92fdea a0f43f4481e0 |
comparison
equal
deleted
inserted
replaced
| 75067:90ec0bc01f3b | 75100:6b7704fe1be1 |
|---|---|
| 65 static void wait_for_thread_shutdown(void); | 65 static void wait_for_thread_shutdown(void); |
| 66 static void call_sys_exitfunc(void); | 66 static void call_sys_exitfunc(void); |
| 67 static void call_ll_exitfuncs(void); | 67 static void call_ll_exitfuncs(void); |
| 68 extern void _PyUnicode_Init(void); | 68 extern void _PyUnicode_Init(void); |
| 69 extern void _PyUnicode_Fini(void); | 69 extern void _PyUnicode_Fini(void); |
| 70 extern void _PyRandom_Init(void); | |
| 70 | 71 |
| 71 #ifdef WITH_THREAD | 72 #ifdef WITH_THREAD |
| 72 extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *); | 73 extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *); |
| 73 extern void _PyGILState_Fini(void); | 74 extern void _PyGILState_Fini(void); |
| 74 #endif /* WITH_THREAD */ | 75 #endif /* WITH_THREAD */ |
| 87 /* _XXX Py_QnewFlag should go away in 2.3. It's true iff -Qnew is passed, | 88 /* _XXX Py_QnewFlag should go away in 2.3. It's true iff -Qnew is passed, |
| 88 on the command line, and is used in 2.2 by ceval.c to make all "/" divisions | 89 on the command line, and is used in 2.2 by ceval.c to make all "/" divisions |
| 89 true divisions (which they will be in 2.3). */ | 90 true divisions (which they will be in 2.3). */ |
| 90 int _Py_QnewFlag = 0; | 91 int _Py_QnewFlag = 0; |
| 91 int Py_NoUserSiteDirectory = 0; /* for -s and site.py */ | 92 int Py_NoUserSiteDirectory = 0; /* for -s and site.py */ |
| 93 int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */ | |
| 92 | 94 |
| 93 /* PyModule_GetWarningsModule is no longer necessary as of 2.6 | 95 /* PyModule_GetWarningsModule is no longer necessary as of 2.6 |
| 94 since _warnings is builtin. This API should not be used. */ | 96 since _warnings is builtin. This API should not be used. */ |
| 95 PyObject * | 97 PyObject * |
| 96 PyModule_GetWarningsModule(void) | 98 PyModule_GetWarningsModule(void) |
| 164 Py_VerboseFlag = add_flag(Py_VerboseFlag, p); | 166 Py_VerboseFlag = add_flag(Py_VerboseFlag, p); |
| 165 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0') | 167 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0') |
| 166 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p); | 168 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p); |
| 167 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0') | 169 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0') |
| 168 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p); | 170 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p); |
| 171 /* The variable is only tested for existence here; _PyRandom_Init will | |
| 172 check its value further. */ | |
| 173 if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0') | |
| 174 Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p); | |
| 175 | |
| 176 _PyRandom_Init(); | |
| 169 | 177 |
| 170 interp = PyInterpreterState_New(); | 178 interp = PyInterpreterState_New(); |
| 171 if (interp == NULL) | 179 if (interp == NULL) |
| 172 Py_FatalError("Py_Initialize: can't make first interpreter"); | 180 Py_FatalError("Py_Initialize: can't make first interpreter"); |
| 173 | 181 |
