From d8b690f7ae57169d95f1cb4b3a0bccf5adfe6a30 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Fri, 16 May 2008 17:28:50 +0000 Subject: #2895: don't crash with bytes as keyword argument names. --- Lib/test/test_grammar.py | 8 ++++++++ Misc/NEWS | 2 ++ Python/getargs.c | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index 4c0eda5..94b7b31 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -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) diff --git a/Misc/NEWS b/Misc/NEWS index 7bb3b3f..f39563a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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. diff --git a/Python/getargs.c b/Python/getargs.c index 427a951..7ca7672 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -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); -- cgit v0.12