handle dict subclasses gracefully in PyArg_ValidateKeywordArguments
This commit is contained in:
parent
12ae290bf3
commit
f609654b0e
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue