Author: Matti Picus <matti.pi...@gmail.com>
Branch: unicode-utf8-py3
Changeset: r95370:33f7275c06e2
Date: 2018-11-25 18:52 -0600
http://bitbucket.org/pypy/pypy/changeset/33f7275c06e2/

Log:    test, fix allowing surrogates in PyUnicodeObject

diff --git a/pypy/module/cpyext/test/test_getargs.py 
b/pypy/module/cpyext/test/test_getargs.py
--- a/pypy/module/cpyext/test/test_getargs.py
+++ b/pypy/module/cpyext/test/test_getargs.py
@@ -213,3 +213,25 @@
             ''', PY_SSIZE_T_CLEAN=True)
         assert type(charbuf(b'12345')) is bytes
         assert charbuf(b'12345') == b'12345'
+
+    def test_getargs_keywords(self):
+        # taken from lib-python/3/test_getargs2.py
+        module = self.import_extension('foo', [
+            ("getargs_keywords", "METH_KEYWORDS | METH_VARARGS",
+            '''
+            static char *keywords[] = {"arg1","arg2","arg3","arg4","arg5", 
NULL};
+            static char *fmt="(ii)i|(i(ii))(iii)i";
+            int int_args[10]={-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
+
+            if (!PyArg_ParseTupleAndKeywords(args, kwargs, fmt, keywords,
+                &int_args[0], &int_args[1], &int_args[2], &int_args[3],
+                &int_args[4], &int_args[5], &int_args[6], &int_args[7],
+                &int_args[8], &int_args[9]))
+                return NULL;
+            return Py_BuildValue("iiiiiiiiii",
+                int_args[0], int_args[1], int_args[2], int_args[3], 
int_args[4],
+                int_args[5], int_args[6], int_args[7], int_args[8], int_args[9]
+                );
+            ''')])
+        raises(TypeError, module.getargs_keywords, (1,2), 3, (4,(5,6)), 
(7,8,9), **{'\uDC80': 10})
+
diff --git a/pypy/module/cpyext/unicodeobject.py 
b/pypy/module/cpyext/unicodeobject.py
--- a/pypy/module/cpyext/unicodeobject.py
+++ b/pypy/module/cpyext/unicodeobject.py
@@ -83,9 +83,10 @@
     be modified after this call.
     """
     s = rffi.wcharpsize2unicode(get_wbuffer(py_obj), get_wsize(py_obj))
+    s_utf8 = runicode.unicode_encode_utf_8(s, len(s), 'strict',
+                                           allow_surrogates=True)
     w_type = from_ref(space, rffi.cast(PyObject, py_obj.c_ob_type))
     w_obj = space.allocate_instance(unicodeobject.W_UnicodeObject, w_type)
-    s_utf8 = runicode.unicode_encode_utf_8(s, len(s), 'strict')
     w_obj.__init__(s_utf8, len(s))
     track_reference(space, py_obj, w_obj)
     return w_obj
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to