mirror of
https://github.com/python/cpython.git
synced 2025-11-25 12:44:13 +00:00
Raise KeyError instead of OverflowError when getpwuid's argument is out of
uid_t range.
This commit is contained in:
commit
fd6e6cfa29
2 changed files with 14 additions and 1 deletions
|
|
@ -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):
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue