Commit d8b690f7 authored by Georg Brandl's avatar Georg Brandl

#2895: don't crash with bytes as keyword argument names.

parent bf82e374
......@@ -265,6 +265,14 @@ class GrammarTests(unittest.TestCase):
d22v(*(1, 2, 3, 4))
d22v(1, 2, *(3, 4, 5))
d22v(1, *(2, 3), **{'d': 4})
# keyword argument type tests
try:
str('x', **{b'foo':1 })
except TypeError:
pass
else:
self.fail('Bytes should not work as keyword argument names')
# keyword only argument tests
def pos0key1(*, key): return key
pos0key1(key=100)
......
......@@ -12,6 +12,8 @@ What's new in Python 3.0b1?
Core and Builtins
-----------------
- Issue 2895: Don't crash when given bytes objects as keyword names.
- Issue 2798: When parsing arguments with PyArg_ParseTuple, the "s" code now
allows any unicode string and returns a utf-8 encoded buffer, just like the
"s#" code already does. The "z" code was corrected as well.
......
......@@ -1532,7 +1532,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
while (PyDict_Next(keywords, &pos, &key, &value)) {
int match = 0;
char *ks;
if (!PyString_Check(key) && !PyUnicode_Check(key)) {
if (!PyUnicode_Check(key)) {
PyErr_SetString(PyExc_TypeError,
"keywords must be strings");
return cleanreturn(0, freelist);
......
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