Commit 22fde3dd authored by Serhiy Storchaka's avatar Serhiy Storchaka

Raise KeyError instead of OverflowError when getpwuid's argument is out of

uid_t range.
parent 5b386aa5
...@@ -49,7 +49,9 @@ class PwdTest(unittest.TestCase): ...@@ -49,7 +49,9 @@ class PwdTest(unittest.TestCase):
def test_errors(self): def test_errors(self):
self.assertRaises(TypeError, pwd.getpwuid) self.assertRaises(TypeError, pwd.getpwuid)
self.assertRaises(TypeError, pwd.getpwuid, 3.14)
self.assertRaises(TypeError, pwd.getpwnam) self.assertRaises(TypeError, pwd.getpwnam)
self.assertRaises(TypeError, pwd.getpwnam, 42)
self.assertRaises(TypeError, pwd.getpwall, 42) self.assertRaises(TypeError, pwd.getpwall, 42)
# try to get some errors # try to get some errors
...@@ -93,6 +95,13 @@ class PwdTest(unittest.TestCase): ...@@ -93,6 +95,13 @@ class PwdTest(unittest.TestCase):
self.assertNotIn(fakeuid, byuids) self.assertNotIn(fakeuid, byuids)
self.assertRaises(KeyError, pwd.getpwuid, fakeuid) self.assertRaises(KeyError, pwd.getpwuid, fakeuid)
# -1 shouldn't be a valid uid because it has a special meaning in many
# uid-related functions
self.assertRaises(KeyError, pwd.getpwuid, -1)
# should be out of uid_t range
self.assertRaises(KeyError, pwd.getpwuid, 2**128)
self.assertRaises(KeyError, pwd.getpwuid, -2**128)
def test_main(): def test_main():
support.run_unittest(PwdTest) support.run_unittest(PwdTest)
......
...@@ -106,8 +106,12 @@ pwd_getpwuid(PyObject *self, PyObject *args) ...@@ -106,8 +106,12 @@ pwd_getpwuid(PyObject *self, PyObject *args)
{ {
uid_t uid; uid_t uid;
struct passwd *p; struct passwd *p;
if (!PyArg_ParseTuple(args, "O&:getpwuid", _Py_Uid_Converter, &uid)) if (!PyArg_ParseTuple(args, "O&:getpwuid", _Py_Uid_Converter, &uid)) {
if (PyErr_ExceptionMatches(PyExc_OverflowError))
PyErr_Format(PyExc_KeyError,
"getpwuid(): uid not found");
return NULL; return NULL;
}
if ((p = getpwuid(uid)) == NULL) { if ((p = getpwuid(uid)) == NULL) {
PyObject *uid_obj = _PyLong_FromUid(uid); PyObject *uid_obj = _PyLong_FromUid(uid);
if (uid_obj == NULL) if (uid_obj == NULL)
......
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