Skip to content

Commit

Permalink
Issue #28511: Use the "U" format instead of "O!" in PyArg_Parse*.
Browse files Browse the repository at this point in the history
  • Loading branch information
serhiy-storchaka committed Oct 23, 2016
1 parent 8c93310 commit f8d7d41
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 37 deletions.
5 changes: 2 additions & 3 deletions Modules/_datetimemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions Modules/clinic/unicodedata.c.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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]*/
7 changes: 2 additions & 5 deletions Modules/unicodedata.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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. */
Expand Down
33 changes: 10 additions & 23 deletions Objects/exceptions.c
Original file line number Diff line number Diff line change
Expand Up @@ -1820,18 +1820,10 @@ 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)) {
err->encoding = err->object = err->reason = NULL;
return -1;
}

if (PyUnicode_READY(err->object) < -1) {
err->encoding = NULL;
if (!PyArg_ParseTuple(args, "UUnnU",
&err->encoding, &err->object,
&err->start, &err->end, &err->reason)) {
err->encoding = err->object = err->reason = NULL;
return -1;
}

Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down
6 changes: 3 additions & 3 deletions Objects/unicodeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit f8d7d41

Please sign in to comment.