Issue #26129: Deprecated accepting non-integers in grp.getgrgid().
This commit is contained in:
parent
9def284387
commit
9cc4ed5c7a
|
@ -42,6 +42,9 @@ It defines the following items:
|
|||
Return the group database entry for the given numeric group ID. :exc:`KeyError`
|
||||
is raised if the entry asked for cannot be found.
|
||||
|
||||
.. deprecated:: 3.6
|
||||
Since Python 3.6 the support of non-integer arguments like floats or
|
||||
strings in :func:`getgrgid` is deprecated.
|
||||
|
||||
.. function:: getgrnam(name)
|
||||
|
||||
|
|
|
@ -92,5 +92,15 @@ class GroupDatabaseTestCase(unittest.TestCase):
|
|||
|
||||
self.assertRaises(KeyError, grp.getgrgid, fakegid)
|
||||
|
||||
def test_noninteger_gid(self):
|
||||
entries = grp.getgrall()
|
||||
if not entries:
|
||||
self.skipTest('no groups')
|
||||
# Choose an existent gid.
|
||||
gid = entries[0][2]
|
||||
self.assertWarns(DeprecationWarning, grp.getgrgid, float(gid))
|
||||
self.assertWarns(DeprecationWarning, grp.getgrgid, str(gid))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -131,6 +131,8 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #26129: Deprecated accepting non-integers in grp.getgrgid().
|
||||
|
||||
- Issue #25850: Use cross-compilation by default for 64-bit Windows.
|
||||
|
||||
- Issue #25822: Add docstrings to the fields of urllib.parse results.
|
||||
|
|
|
@ -100,6 +100,16 @@ grp_getgrgid_impl(PyModuleDef *module, PyObject *id)
|
|||
gid_t gid;
|
||||
struct group *p;
|
||||
|
||||
if (!_Py_Gid_Converter(id, &gid)) {
|
||||
if (!PyErr_ExceptionMatches(PyExc_TypeError)) {
|
||||
return NULL;
|
||||
}
|
||||
PyErr_Clear();
|
||||
if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
|
||||
"group id must be int, not %.200",
|
||||
id->ob_type->tp_name) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
py_int_id = PyNumber_Long(id);
|
||||
if (!py_int_id)
|
||||
return NULL;
|
||||
|
@ -108,6 +118,7 @@ grp_getgrgid_impl(PyModuleDef *module, PyObject *id)
|
|||
return NULL;
|
||||
}
|
||||
Py_DECREF(py_int_id);
|
||||
}
|
||||
|
||||
if ((p = getgrgid(gid)) == NULL) {
|
||||
PyObject *gid_obj = _PyLong_FromGid(gid);
|
||||
|
|
Loading…
Reference in New Issue