Issue #28511: Use the "U" format instead of "O!" in PyArg_Parse*.

This commit is contained in:
Serhiy Storchaka 2016-10-23 15:12:25 +03:00
parent 8c9331057d
commit f8d7d41507
5 changed files with 20 additions and 37 deletions

View File

@ -3243,9 +3243,8 @@ timezone_new(PyTypeObject *type, PyObject *args, PyObject *kw)
{
PyObject *offset;
PyObject *name = NULL;
if (PyArg_ParseTupleAndKeywords(args, kw, "O!|O!:timezone", timezone_kws,
&PyDateTime_DeltaType, &offset,
&PyUnicode_Type, &name))
if (PyArg_ParseTupleAndKeywords(args, kw, "O!|U:timezone", timezone_kws,
&PyDateTime_DeltaType, &offset, &name))
return new_timezone(offset, name);
return NULL;

View File

@ -306,8 +306,8 @@ unicodedata_UCD_normalize(PyObject *self, PyObject *args)
const char *form;
PyObject *input;
if (!PyArg_ParseTuple(args, "sO!:normalize",
&form, &PyUnicode_Type, &input)) {
if (!PyArg_ParseTuple(args, "sU:normalize",
&form, &input)) {
goto exit;
}
return_value = unicodedata_UCD_normalize_impl(self, form, input);
@ -379,4 +379,4 @@ unicodedata_UCD_lookup(PyObject *self, PyObject *arg)
exit:
return return_value;
}
/*[clinic end generated code: output=5313ce129da87b2f input=a9049054013a1b77]*/
/*[clinic end generated code: output=07e93c267323a576 input=a9049054013a1b77]*/

View File

@ -808,7 +808,7 @@ unicodedata.UCD.normalize
self: self
form: str
unistr as input: object(subclass_of='&PyUnicode_Type')
unistr as input: unicode
/
Return the normal form 'form' for the Unicode string unistr.
@ -819,11 +819,8 @@ Valid values for form are 'NFC', 'NFKC', 'NFD', and 'NFKD'.
static PyObject *
unicodedata_UCD_normalize_impl(PyObject *self, const char *form,
PyObject *input)
/*[clinic end generated code: output=62d1f8870027efdc input=cd092e631cf11883]*/
/*[clinic end generated code: output=62d1f8870027efdc input=1744c55f4ab79bf0]*/
{
if (PyUnicode_READY(input) == -1)
return NULL;
if (PyUnicode_GET_LENGTH(input) == 0) {
/* Special case empty input strings, since resizing
them later would cause internal errors. */

View File

@ -1820,21 +1820,13 @@ UnicodeEncodeError_init(PyObject *self, PyObject *args, PyObject *kwds)
Py_CLEAR(err->object);
Py_CLEAR(err->reason);
if (!PyArg_ParseTuple(args, "O!O!nnO!",
&PyUnicode_Type, &err->encoding,
&PyUnicode_Type, &err->object,
&err->start,
&err->end,
&PyUnicode_Type, &err->reason)) {
if (!PyArg_ParseTuple(args, "UUnnU",
&err->encoding, &err->object,
&err->start, &err->end, &err->reason)) {
err->encoding = err->object = err->reason = NULL;
return -1;
}
if (PyUnicode_READY(err->object) < -1) {
err->encoding = NULL;
return -1;
}
Py_INCREF(err->encoding);
Py_INCREF(err->object);
Py_INCREF(err->reason);
@ -1935,12 +1927,9 @@ UnicodeDecodeError_init(PyObject *self, PyObject *args, PyObject *kwds)
Py_CLEAR(ude->object);
Py_CLEAR(ude->reason);
if (!PyArg_ParseTuple(args, "O!OnnO!",
&PyUnicode_Type, &ude->encoding,
&ude->object,
&ude->start,
&ude->end,
&PyUnicode_Type, &ude->reason)) {
if (!PyArg_ParseTuple(args, "UOnnU",
&ude->encoding, &ude->object,
&ude->start, &ude->end, &ude->reason)) {
ude->encoding = ude->object = ude->reason = NULL;
return -1;
}
@ -2050,11 +2039,9 @@ UnicodeTranslateError_init(PyUnicodeErrorObject *self, PyObject *args,
Py_CLEAR(self->object);
Py_CLEAR(self->reason);
if (!PyArg_ParseTuple(args, "O!nnO!",
&PyUnicode_Type, &self->object,
&self->start,
&self->end,
&PyUnicode_Type, &self->reason)) {
if (!PyArg_ParseTuple(args, "UnnU",
&self->object,
&self->start, &self->end, &self->reason)) {
self->object = self->reason = NULL;
return -1;
}

View File

@ -8621,7 +8621,7 @@ unicode_translate_call_errorhandler(const char *errors,
Py_ssize_t startpos, Py_ssize_t endpos,
Py_ssize_t *newpos)
{
static const char *argparse = "O!n;translating error handler must return (str, int) tuple";
static const char *argparse = "Un;translating error handler must return (str, int) tuple";
Py_ssize_t i_newpos;
PyObject *restuple;
@ -8643,11 +8643,11 @@ unicode_translate_call_errorhandler(const char *errors,
if (restuple == NULL)
return NULL;
if (!PyTuple_Check(restuple)) {
PyErr_SetString(PyExc_TypeError, &argparse[4]);
PyErr_SetString(PyExc_TypeError, &argparse[3]);
Py_DECREF(restuple);
return NULL;
}
if (!PyArg_ParseTuple(restuple, argparse, &PyUnicode_Type,
if (!PyArg_ParseTuple(restuple, argparse,
&resunicode, &i_newpos)) {
Py_DECREF(restuple);
return NULL;