From cae6e4775b37c412609d3a0d303c0831ff0012ff Mon Sep 17 00:00:00 2001
From: "Miss Islington (bot)"
 <31488909+miss-islington@users.noreply.github.com>
Date: Sat, 7 Oct 2017 13:52:57 -0700
Subject: [3.6] bpo-31655: Validate keyword names in SimpleNamespace
 constructor. (GH-3909) (#3920)

(cherry picked from commit 79ba471488b936abda5ba5234b1ea90cbc94cae6)
---
 Lib/test/test_types.py    | 2 ++
 Objects/namespaceobject.c | 6 +++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index d79429f..73fbdbf 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -1051,6 +1051,8 @@ class SimpleNamespaceTests(unittest.TestCase):
 
         with self.assertRaises(TypeError):
             types.SimpleNamespace(1, 2, 3)
+        with self.assertRaises(TypeError):
+            types.SimpleNamespace(**{1: 2})
 
         self.assertEqual(len(ns1.__dict__), 0)
         self.assertEqual(vars(ns1), {})
diff --git a/Objects/namespaceobject.c b/Objects/namespaceobject.c
index 0bb3063..d28c913 100644
--- a/Objects/namespaceobject.c
+++ b/Objects/namespaceobject.c
@@ -50,8 +50,12 @@ namespace_init(_PyNamespaceObject *ns, PyObject *args, PyObject *kwds)
             return -1;
         }
     }
-    if (kwds == NULL)
+    if (kwds == NULL) {
         return 0;
+    }
+    if (!PyArg_ValidateKeywordArguments(kwds)) {
+        return -1;
+    }
     return PyDict_Update(ns->ns_dict, kwds);
 }
 
-- 
cgit v0.12