mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
#2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
with chars outside the 7bit ascii (s# was already correct). This is necessary to allow python run from a non-ASCII directory, and seems enough on some platforms, probably where the default PyUnicode encoding (utf-8) is also the default filesystem encoding.
This commit is contained in:
parent
e6161492fe
commit
0740459248
3 changed files with 45 additions and 8 deletions
|
|
@ -475,6 +475,38 @@ test_k_code(PyObject *self)
|
|||
}
|
||||
|
||||
|
||||
/* Test the s and z codes for PyArg_ParseTuple.
|
||||
*/
|
||||
static PyObject *
|
||||
test_s_code(PyObject *self)
|
||||
{
|
||||
/* Unicode strings should be accepted */
|
||||
PyObject *tuple, *obj;
|
||||
char *value;
|
||||
|
||||
tuple = PyTuple_New(1);
|
||||
if (tuple == NULL)
|
||||
return NULL;
|
||||
|
||||
obj = PyUnicode_Decode("t\xeate", strlen("t\xeate"),
|
||||
"latin-1", NULL);
|
||||
if (obj == NULL)
|
||||
return NULL;
|
||||
|
||||
PyTuple_SET_ITEM(tuple, 0, obj);
|
||||
|
||||
/* These two blocks used to raise a TypeError:
|
||||
* "argument must be string without null bytes, not str"
|
||||
*/
|
||||
if (PyArg_ParseTuple(tuple, "s:test_s_code1", &value) < 0)
|
||||
return NULL;
|
||||
|
||||
if (PyArg_ParseTuple(tuple, "z:test_s_code2", &value) < 0)
|
||||
return NULL;
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
/* Test the u and u# codes for PyArg_ParseTuple. May leak memory in case
|
||||
of an error.
|
||||
*/
|
||||
|
|
@ -952,6 +984,7 @@ static PyMethodDef TestMethods[] = {
|
|||
{"codec_incrementaldecoder",
|
||||
(PyCFunction)codec_incrementaldecoder, METH_VARARGS},
|
||||
#endif
|
||||
{"test_s_code", (PyCFunction)test_s_code, METH_NOARGS},
|
||||
{"test_u_code", (PyCFunction)test_u_code, METH_NOARGS},
|
||||
{"test_Z_code", (PyCFunction)test_Z_code, METH_NOARGS},
|
||||
#ifdef WITH_THREAD
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue