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 *offset;
PyObject *name = NULL; PyObject *name = NULL;
if (PyArg_ParseTupleAndKeywords(args, kw, "O!|O!:timezone", timezone_kws, if (PyArg_ParseTupleAndKeywords(args, kw, "O!|U:timezone", timezone_kws,
&PyDateTime_DeltaType, &offset, &PyDateTime_DeltaType, &offset, &name))
&PyUnicode_Type, &name))
return new_timezone(offset, name); return new_timezone(offset, name);
return NULL; return NULL;

View file

@ -306,8 +306,8 @@ unicodedata_UCD_normalize(PyObject *self, PyObject *args)
const char *form; const char *form;
PyObject *input; PyObject *input;
if (!PyArg_ParseTuple(args, "sO!:normalize", if (!PyArg_ParseTuple(args, "sU:normalize",
&form, &PyUnicode_Type, &input)) { &form, &input)) {
goto exit; goto exit;
} }
return_value = unicodedata_UCD_normalize_impl(self, form, input); return_value = unicodedata_UCD_normalize_impl(self, form, input);
@ -379,4 +379,4 @@ unicodedata_UCD_lookup(PyObject *self, PyObject *arg)
exit: exit:
return return_value; 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 self: self
form: str form: str
unistr as input: object(subclass_of='&PyUnicode_Type') unistr as input: unicode
/ /
Return the normal form 'form' for the Unicode string unistr. 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 * static PyObject *
unicodedata_UCD_normalize_impl(PyObject *self, const char *form, unicodedata_UCD_normalize_impl(PyObject *self, const char *form,
PyObject *input) 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) { if (PyUnicode_GET_LENGTH(input) == 0) {
/* Special case empty input strings, since resizing /* Special case empty input strings, since resizing
them later would cause internal errors. */ them later would cause internal errors. */

View file

@ -1820,18 +1820,10 @@ UnicodeEncodeError_init(PyObject *self, PyObject *args, PyObject *kwds)
Py_CLEAR(err->object); Py_CLEAR(err->object);
Py_CLEAR(err->reason); Py_CLEAR(err->reason);
if (!PyArg_ParseTuple(args, "O!O!nnO!", if (!PyArg_ParseTuple(args, "UUnnU",
&PyUnicode_Type, &err->encoding, &err->encoding, &err->object,
&PyUnicode_Type, &err->object, &err->start, &err->end, &err->reason)) {
&err->start, err->encoding = err->object = err->reason = NULL;
&err->end,
&PyUnicode_Type, &err->reason)) {
err->encoding = err->object = err->reason = NULL;
return -1;
}
if (PyUnicode_READY(err->object) < -1) {
err->encoding = NULL;
return -1; return -1;
} }
@ -1935,12 +1927,9 @@ UnicodeDecodeError_init(PyObject *self, PyObject *args, PyObject *kwds)
Py_CLEAR(ude->object); Py_CLEAR(ude->object);
Py_CLEAR(ude->reason); Py_CLEAR(ude->reason);
if (!PyArg_ParseTuple(args, "O!OnnO!", if (!PyArg_ParseTuple(args, "UOnnU",
&PyUnicode_Type, &ude->encoding, &ude->encoding, &ude->object,
&ude->object, &ude->start, &ude->end, &ude->reason)) {
&ude->start,
&ude->end,
&PyUnicode_Type, &ude->reason)) {
ude->encoding = ude->object = ude->reason = NULL; ude->encoding = ude->object = ude->reason = NULL;
return -1; return -1;
} }
@ -2050,11 +2039,9 @@ UnicodeTranslateError_init(PyUnicodeErrorObject *self, PyObject *args,
Py_CLEAR(self->object); Py_CLEAR(self->object);
Py_CLEAR(self->reason); Py_CLEAR(self->reason);
if (!PyArg_ParseTuple(args, "O!nnO!", if (!PyArg_ParseTuple(args, "UnnU",
&PyUnicode_Type, &self->object, &self->object,
&self->start, &self->start, &self->end, &self->reason)) {
&self->end,
&PyUnicode_Type, &self->reason)) {
self->object = self->reason = NULL; self->object = self->reason = NULL;
return -1; 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 startpos, Py_ssize_t endpos,
Py_ssize_t *newpos) 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; Py_ssize_t i_newpos;
PyObject *restuple; PyObject *restuple;
@ -8643,11 +8643,11 @@ unicode_translate_call_errorhandler(const char *errors,
if (restuple == NULL) if (restuple == NULL)
return NULL; return NULL;
if (!PyTuple_Check(restuple)) { if (!PyTuple_Check(restuple)) {
PyErr_SetString(PyExc_TypeError, &argparse[4]); PyErr_SetString(PyExc_TypeError, &argparse[3]);
Py_DECREF(restuple); Py_DECREF(restuple);
return NULL; return NULL;
} }
if (!PyArg_ParseTuple(restuple, argparse, &PyUnicode_Type, if (!PyArg_ParseTuple(restuple, argparse,
&resunicode, &i_newpos)) { &resunicode, &i_newpos)) {
Py_DECREF(restuple); Py_DECREF(restuple);
return NULL; return NULL;