summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2014-04-28 11:08:28 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2014-04-28 11:08:28 (GMT)
commit3a74ce2088e5e29d81dd672038aef7204c82947b (patch)
treee0554959db9899de773aad8c1d004f50e35f6d28 /Python
parent6cd08d627723f122bc964f7da0d41c3ff439c509 (diff)
parent871dfc41d37b02a7af6eb03028edc6702f24fd1d (diff)
downloadcpython-3a74ce2088e5e29d81dd672038aef7204c82947b.zip
cpython-3a74ce2088e5e29d81dd672038aef7204c82947b.tar.gz
cpython-3a74ce2088e5e29d81dd672038aef7204c82947b.tar.bz2
Issue #13204: Calling sys.flags.__new__ would crash the interpreter, now it raises a TypeError.
Diffstat (limited to 'Python')
-rw-r--r--Python/sysmodule.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 64de2bf..2366a8c 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1622,6 +1622,7 @@ PyObject *
_PySys_Init(void)
{
PyObject *m, *sysdict, *version_info;
+ int res;
m = PyModule_Create(&sysmodule);
if (m == NULL)
@@ -1629,7 +1630,6 @@ _PySys_Init(void)
sysdict = PyModule_GetDict(m);
#define SET_SYS_FROM_STRING_BORROW(key, value) \
do { \
- int res; \
PyObject *v = (value); \
if (v == NULL) \
return NULL; \
@@ -1640,7 +1640,6 @@ _PySys_Init(void)
} while (0)
#define SET_SYS_FROM_STRING(key, value) \
do { \
- int res; \
PyObject *v = (value); \
if (v == NULL) \
return NULL; \
@@ -1759,6 +1758,9 @@ _PySys_Init(void)
/* prevent user from creating new instances */
VersionInfoType.tp_init = NULL;
VersionInfoType.tp_new = NULL;
+ res = PyDict_DelItemString(VersionInfoType.tp_dict, "__new__");
+ if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
+ PyErr_Clear();
/* implementation */
SET_SYS_FROM_STRING("implementation", make_impl_info(version_info));
@@ -1772,7 +1774,9 @@ _PySys_Init(void)
/* prevent user from creating new instances */
FlagsType.tp_init = NULL;
FlagsType.tp_new = NULL;
-
+ res = PyDict_DelItemString(FlagsType.tp_dict, "__new__");
+ if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
+ PyErr_Clear();
#if defined(MS_WINDOWS)
/* getwindowsversion */
@@ -1783,6 +1787,9 @@ _PySys_Init(void)
/* prevent user from creating new instances */
WindowsVersionType.tp_init = NULL;
WindowsVersionType.tp_new = NULL;
+ res = PyDict_DelItemString(WindowsVersionType.tp_dict, "__new__");
+ if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
+ PyErr_Clear();
#endif
/* float repr style: 0.03 (short) vs 0.029999999999999999 (legacy) */