diff --git a/Misc/NEWS b/Misc/NEWS index 7dc65dc6d40..eff46272c91 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,9 @@ Core and builtins - posix.killpg has been added where available. +- sys.exit() inadvertantly allowed more than one argument. + An exception will now be raised if more than one argument is used. + Extension modules - A security hole ("double free") was found in zlib-1.1.3, a popular diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 581a19baae0..0469c7f654f 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -146,8 +146,11 @@ This should be called from inside an except clause only."; static PyObject * sys_exit(PyObject *self, PyObject *args) { + PyObject *exit_code = 0; + if (!PyArg_ParseTuple(args, "|O:exit", &exit_code)) + return NULL; /* Raise SystemExit so callers may catch it or clean up. */ - PyErr_SetObject(PyExc_SystemExit, args); + PyErr_SetObject(PyExc_SystemExit, exit_code); return NULL; } @@ -528,7 +531,7 @@ static PyMethodDef sys_methods[] = { {"displayhook", sys_displayhook, METH_O, displayhook_doc}, {"exc_info", (PyCFunction)sys_exc_info, METH_NOARGS, exc_info_doc}, {"excepthook", sys_excepthook, METH_VARARGS, excepthook_doc}, - {"exit", sys_exit, METH_OLDARGS, exit_doc}, + {"exit", sys_exit, METH_VARARGS, exit_doc}, #ifdef Py_USING_UNICODE {"getdefaultencoding", (PyCFunction)sys_getdefaultencoding, METH_NOARGS, getdefaultencoding_doc},