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