summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-05-07 12:43:59 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2016-05-07 12:43:59 (GMT)
commit17e22959a444ee44c9462f3b66610950a8bc5a2b (patch)
treee6a3629e83b4c84422f0df8181f5e83d9aea37f3
parent1acbf853c8be743c88141501ae879d63eb8ce209 (diff)
parent21eb48764c618eede0405ef840eadf1b03ff9b00 (diff)
downloadcpython-17e22959a444ee44c9462f3b66610950a8bc5a2b.zip
cpython-17e22959a444ee44c9462f3b66610950a8bc5a2b.tar.gz
cpython-17e22959a444ee44c9462f3b66610950a8bc5a2b.tar.bz2
Issue #17765: weakref.ref() no longer silently ignores keyword arguments.
Patch by Georg Brandl.
-rw-r--r--Lib/test/test_weakref.py4
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/weakrefobject.c4
3 files changed, 10 insertions, 1 deletions
diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py
index f37f1e9..f49cb7e 100644
--- a/Lib/test/test_weakref.py
+++ b/Lib/test/test_weakref.py
@@ -133,6 +133,10 @@ class ReferencesTestCase(TestBase):
ref1 = weakref.ref(c, callback)
del c
+ def test_constructor_kwargs(self):
+ c = C()
+ self.assertRaises(TypeError, weakref.ref, c, callback=None)
+
def test_proxy_ref(self):
o = C()
o.bar = 1
diff --git a/Misc/NEWS b/Misc/NEWS
index 8edfc5b..705603b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -265,6 +265,9 @@ Core and Builtins
Library
-------
+- Issue #17765: weakref.ref() no longer silently ignores keyword arguments.
+ Patch by Georg Brandl.
+
- Issue #26873: xmlrpc now raises ResponseError on unsupported type tags
instead of silently return incorrect result.
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index f42fe3d..f75b1e8 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -268,7 +268,6 @@ static int
parse_weakref_init_args(const char *funcname, PyObject *args, PyObject *kwargs,
PyObject **obp, PyObject **callbackp)
{
- /* XXX Should check that kwargs == NULL or is empty. */
return PyArg_UnpackTuple(args, funcname, 1, 2, obp, callbackp);
}
@@ -331,6 +330,9 @@ weakref___init__(PyObject *self, PyObject *args, PyObject *kwargs)
{
PyObject *tmp;
+ if (!_PyArg_NoKeywords("ref()", kwargs))
+ return -1;
+
if (parse_weakref_init_args("__init__", args, kwargs, &tmp, &tmp))
return 0;
else