# HG changeset patch # User Georg Brandl # Date 1381761780 -7200 # Mon Oct 14 16:43:00 2013 +0200 # Node ID 5c7bb124f5fe2a0641aa44a4350ded47221d7b05 # Parent 0ee6543fb3f2dbd0ea8194a175e4bea9c346317a Closes #17765: make sure weakref.ref() is not passed keyword arguments as they are ignored. diff -r 0ee6543fb3f2 -r 5c7bb124f5fe Lib/test/test_weakref.py --- a/Lib/test/test_weakref.py Mon Oct 14 16:53:07 2013 +0200 +++ b/Lib/test/test_weakref.py Mon Oct 14 16:43:00 2013 +0200 @@ -122,6 +122,10 @@ 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 -r 0ee6543fb3f2 -r 5c7bb124f5fe Objects/weakrefobject.c --- a/Objects/weakrefobject.c Mon Oct 14 16:53:07 2013 +0200 +++ b/Objects/weakrefobject.c Mon Oct 14 16:43:00 2013 +0200 @@ -268,7 +268,6 @@ parse_weakref_init_args(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 @@ { PyObject *tmp; + if (!_PyArg_NoKeywords("ref()", kwargs)) + return -1; + if (parse_weakref_init_args("__init__", args, kwargs, &tmp, &tmp)) return 0; else