mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
* Add tests for PyUnicode_EncodeDecimal() and PyUnicode_TransformDecimalToASCII() * Remove the unused "e" variable in replace()
This commit is contained in:
parent
58fcf9f801
commit
ab1d16b456
3 changed files with 89 additions and 8 deletions
|
@ -1437,6 +1437,51 @@ unicode_aswidecharstring(PyObject *self, PyObject *args)
|
|||
return Py_BuildValue("(Nn)", result, size);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
unicode_encodedecimal(PyObject *self, PyObject *args)
|
||||
{
|
||||
Py_UNICODE *unicode;
|
||||
Py_ssize_t length;
|
||||
char *errors = NULL;
|
||||
PyObject *decimal;
|
||||
Py_ssize_t decimal_length, new_length;
|
||||
int res;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "u#|s", &unicode, &length, &errors))
|
||||
return NULL;
|
||||
|
||||
decimal_length = length * 7; /* len('€') */
|
||||
decimal = PyBytes_FromStringAndSize(NULL, decimal_length);
|
||||
if (decimal == NULL)
|
||||
return NULL;
|
||||
|
||||
res = PyUnicode_EncodeDecimal(unicode, length,
|
||||
PyBytes_AS_STRING(decimal),
|
||||
errors);
|
||||
if (res < 0) {
|
||||
Py_DECREF(decimal);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
new_length = strlen(PyBytes_AS_STRING(decimal));
|
||||
assert(new_length <= decimal_length);
|
||||
res = _PyBytes_Resize(&decimal, new_length);
|
||||
if (res < 0)
|
||||
return NULL;
|
||||
|
||||
return decimal;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
unicode_transformdecimaltoascii(PyObject *self, PyObject *args)
|
||||
{
|
||||
Py_UNICODE *unicode;
|
||||
Py_ssize_t length;
|
||||
if (!PyArg_ParseTuple(args, "u#|s", &unicode, &length))
|
||||
return NULL;
|
||||
return PyUnicode_TransformDecimalToASCII(unicode, length);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
getargs_w_star(PyObject *self, PyObject *args)
|
||||
{
|
||||
|
@ -2320,8 +2365,10 @@ static PyMethodDef TestMethods[] = {
|
|||
{"test_u_code", (PyCFunction)test_u_code, METH_NOARGS},
|
||||
{"test_Z_code", (PyCFunction)test_Z_code, METH_NOARGS},
|
||||
{"test_widechar", (PyCFunction)test_widechar, METH_NOARGS},
|
||||
{"unicode_aswidechar", unicode_aswidechar, METH_VARARGS},
|
||||
{"unicode_aswidecharstring",unicode_aswidecharstring, METH_VARARGS},
|
||||
{"unicode_aswidechar", unicode_aswidechar, METH_VARARGS},
|
||||
{"unicode_aswidecharstring",unicode_aswidecharstring, METH_VARARGS},
|
||||
{"unicode_encodedecimal", unicode_encodedecimal, METH_VARARGS},
|
||||
{"unicode_transformdecimaltoascii", unicode_transformdecimaltoascii, METH_VARARGS},
|
||||
#ifdef WITH_THREAD
|
||||
{"_test_thread_state", test_thread_state, METH_VARARGS},
|
||||
{"_pending_threadfunc", pending_threadfunc, METH_VARARGS},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue