]> granicus.if.org Git - python/commitdiff
#2895: don't crash with bytes as keyword argument names.
authorGeorg Brandl <georg@python.org>
Fri, 16 May 2008 17:28:50 +0000 (17:28 +0000)
committerGeorg Brandl <georg@python.org>
Fri, 16 May 2008 17:28:50 +0000 (17:28 +0000)
Lib/test/test_grammar.py
Misc/NEWS
Python/getargs.c

index 4c0eda53d3d8fe8cadddc355bc9275835322b329..94b7b312bc76eef0226d41defa0e7ba0e9defc5b 100644 (file)
@@ -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)
index 7bb3b3f21414612ebe1b7b6eb11675add428fdef..f39563ab3977d47802836c00454cab44e51d4a96 100644 (file)
--- 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.
index 427a951274f8d73c0ab6d4e6adc55f4d455b3a41..7ca7672e33d161af13925fe98bf84671af2c3aab 100644 (file)
@@ -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);