]> granicus.if.org Git - python/commitdiff
Issue #17765: weakref.ref() no longer silently ignores keyword arguments.
authorSerhiy Storchaka <storchaka@gmail.com>
Sat, 7 May 2016 12:41:09 +0000 (15:41 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Sat, 7 May 2016 12:41:09 +0000 (15:41 +0300)
Patch by Georg Brandl.

Lib/test/test_weakref.py
Misc/NEWS
Objects/weakrefobject.c

index f37f1e9e245bde629f4f988872ff62e26e1b7dbd..f49cb7e591fac28522beac32b66c61e12f28c301 100644 (file)
@@ -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
index 18995f13ae49a66d35f814d31dd923487562f0e8..3d0a4d041b8d2c215e985065cb1e1b826e6e0623 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -116,6 +116,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.
 
index d4d52e60aea8e9ab18c50f6f84e1831a5def8fea..7e6f36458bc693cffeee1e329196e0af0da9e52d 100644 (file)
@@ -268,7 +268,6 @@ static int
 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 @@ 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