diff --git a/Lib/test/test_getargs2.py b/Lib/test/test_getargs2.py
index a407788..7fa5983 100644
--- a/Lib/test/test_getargs2.py
+++ b/Lib/test/test_getargs2.py
@@ -252,24 +252,28 @@
             getargs_keywords((1,2), 3, (4,(5,6)), (7,8,9), 10),
             (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
             )
+
     def test_mixed_args(self):
         # positional and keyword args
         self.assertEquals(
             getargs_keywords((1,2), 3, (4,(5,6)), arg4=(7,8,9), arg5=10),
             (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
             )
+
     def test_keyword_args(self):
         # all keywords
         self.assertEquals(
             getargs_keywords(arg1=(1,2), arg2=3, arg3=(4,(5,6)), arg4=(7,8,9), arg5=10),
             (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
             )
+
     def test_optional_args(self):
         # missing optional keyword args, skipping tuples
         self.assertEquals(
             getargs_keywords(arg1=(1,2), arg2=3, arg5=10),
             (1, 2, 3, -1, -1, -1, -1, -1, -1, 10)
             )
+
     def test_required_args(self):
         # required arg missing
         try:
@@ -278,6 +282,7 @@
             self.assertEquals(str(err), "Required argument 'arg2' (pos 2) not found")
         else:
             self.fail('TypeError should have been raised')
+
     def test_too_many_args(self):
         try:
             getargs_keywords((1,2),3,(4,(5,6)),(7,8,9),10,111)
@@ -285,6 +290,7 @@
             self.assertEquals(str(err), "function takes at most 5 arguments (6 given)")
         else:
             self.fail('TypeError should have been raised')
+
     def test_invalid_keyword(self):
         # extraneous keyword arg
         try:
@@ -294,6 +300,14 @@
         else:
             self.fail('TypeError should have been raised')
 
+    def test_surrogate_keyword(self):
+        try:
+            getargs_keywords((1,2), 3, (4,(5,6)), (7,8,9), **{'\uDC80': 10})
+        except TypeError as err:
+            self.assertEquals(str(err), "'\udc80' is an invalid keyword argument for this function")
+        else:
+            self.fail('TypeError should have been raised')
+
 def test_main():
     tests = [Signed_TestCase, Unsigned_TestCase, Tuple_TestCase, Keywords_TestCase]
     try:
diff --git a/Python/getargs.c b/Python/getargs.c
index 4fa2b5b..e8efb3c 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -1755,18 +1755,21 @@
                                 "keywords must be strings");
                 return cleanreturn(0, freelist);
             }
+            /* check that _PyUnicode_AsString() result is not NULL */
             ks = _PyUnicode_AsString(key);
-            for (i = 0; i < len; i++) {
-                if (!strcmp(ks, kwlist[i])) {
-                    match = 1;
-                    break;
+            if (ks != NULL) {
+                for (i = 0; i < len; i++) {
+                    if (!strcmp(ks, kwlist[i])) {
+                        match = 1;
+                        break;
+                    }
                 }
             }
             if (!match) {
                 PyErr_Format(PyExc_TypeError,
-                             "'%s' is an invalid keyword "
+                             "'%U' is an invalid keyword "
                              "argument for this function",
-                             ks);
+                             key);
                 return cleanreturn(0, freelist);
             }
         }
