Author: Matti Picus <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit