Commit f609654b authored by Benjamin Peterson's avatar Benjamin Peterson

handle dict subclasses gracefully in PyArg_ValidateKeywordArguments

parent 12ae290b
......@@ -8,10 +8,13 @@ import gc, weakref
class DictTest(unittest.TestCase):
def test_invalid_keyword_arguments(self):
with self.assertRaises(TypeError):
dict(**{1 : 2})
with self.assertRaises(TypeError):
{}.update(**{1 : 2})
class Custom(dict):
pass
for invalid in {1 : 2}, Custom({1 : 2}):
with self.assertRaises(TypeError):
dict(**invalid)
with self.assertRaises(TypeError):
{}.update(**invalid)
def test_constructor(self):
# calling built-in types without argument must return empty
......
......@@ -26,6 +26,11 @@ Library
- Issue #10429: IMAP.starttls() stored the capabilities as bytes objects,
rather than strings.
C-API
-----
- Loosen PyArg_ValidateKeywordArguments to allow dict subclasses.
What's New in Python 3.2 Alpha 4?
=================================
......
......@@ -454,7 +454,7 @@ _PyDict_HasOnlyStringKeys(PyObject *dict)
{
Py_ssize_t pos = 0;
PyObject *key, *value;
assert(PyDict_CheckExact(dict));
assert(PyDict_Check(dict));
/* Shortcut */
if (((PyDictObject *)dict)->ma_lookup == lookdict_unicode)
return 1;
......
......@@ -1394,7 +1394,7 @@ _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args,
int
PyArg_ValidateKeywordArguments(PyObject *kwargs)
{
if (!PyDict_CheckExact(kwargs)) {
if (!PyDict_Check(kwargs)) {
PyErr_BadInternalCall();
return 0;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment