[Python-checkins] cpython: Issue #26129: Deprecated accepting non-integers in grp.getgrgid().
serhiy.storchaka
python-checkins at python.org
Mon Jan 18 11:51:17 EST 2016
https://hg.python.org/cpython/rev/65e0e06b70b6
changeset: 99960:65e0e06b70b6
user: Serhiy Storchaka <storchaka at gmail.com>
date: Mon Jan 18 18:49:57 2016 +0200
summary:
Issue #26129: Deprecated accepting non-integers in grp.getgrgid().
files:
Doc/library/grp.rst | 3 +++
Lib/test/test_grp.py | 10 ++++++++++
Misc/NEWS | 2 ++
Modules/grpmodule.c | 21 ++++++++++++++++-----
4 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/Doc/library/grp.rst b/Doc/library/grp.rst
--- a/Doc/library/grp.rst
+++ b/Doc/library/grp.rst
@@ -42,6 +42,9 @@
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)
diff --git a/Lib/test/test_grp.py b/Lib/test/test_grp.py
--- a/Lib/test/test_grp.py
+++ b/Lib/test/test_grp.py
@@ -92,5 +92,15 @@
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()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -131,6 +131,8 @@
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.
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -100,14 +100,25 @@
gid_t gid;
struct group *p;
- py_int_id = PyNumber_Long(id);
- if (!py_int_id)
+ if (!_Py_Gid_Converter(id, &gid)) {
+ if (!PyErr_ExceptionMatches(PyExc_TypeError)) {
return NULL;
- if (!_Py_Gid_Converter(py_int_id, &gid)) {
+ }
+ 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;
+ if (!_Py_Gid_Converter(py_int_id, &gid)) {
+ Py_DECREF(py_int_id);
+ return NULL;
+ }
Py_DECREF(py_int_id);
- return NULL;
}
- Py_DECREF(py_int_id);
if ((p = getgrgid(gid)) == NULL) {
PyObject *gid_obj = _PyLong_FromGid(gid);
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list