mirror of https://github.com/python/cpython
Fix usage og PyUnicode_READY()
This commit is contained in:
parent
e06e145943
commit
e1335c711c
|
@ -131,6 +131,10 @@ write_str(stringio *self, PyObject *obj)
|
|||
return -1;
|
||||
|
||||
assert(PyUnicode_Check(decoded));
|
||||
if (PyUnicode_READY(decoded)) {
|
||||
Py_DECREF(decoded);
|
||||
return -1;
|
||||
}
|
||||
len = PyUnicode_GET_LENGTH(decoded);
|
||||
|
||||
assert(len >= 0);
|
||||
|
|
|
@ -2120,6 +2120,10 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
|
|||
str_obj = PyUnicode_DecodeUTF8(str, strlen(str), "replace");
|
||||
if (!str_obj)
|
||||
goto fail;
|
||||
if (PyUnicode_READY(str_obj)) {
|
||||
Py_DECREF(str_obj);
|
||||
goto fail;
|
||||
}
|
||||
argmaxchar = PyUnicode_MAX_CHAR_VALUE(str_obj);
|
||||
maxchar = Py_MAX(maxchar, argmaxchar);
|
||||
n += PyUnicode_GET_LENGTH(str_obj);
|
||||
|
@ -10062,17 +10066,17 @@ PyUnicode_Append(PyObject **p_left, PyObject *right)
|
|||
goto error;
|
||||
}
|
||||
|
||||
if (PyUnicode_READY(left))
|
||||
goto error;
|
||||
if (PyUnicode_READY(right))
|
||||
goto error;
|
||||
|
||||
if (PyUnicode_CheckExact(left) && left != unicode_empty
|
||||
&& PyUnicode_CheckExact(right) && right != unicode_empty
|
||||
&& unicode_resizable(left)
|
||||
&& (_PyUnicode_KIND(right) <= _PyUnicode_KIND(left)
|
||||
|| _PyUnicode_WSTR(left) != NULL))
|
||||
{
|
||||
if (PyUnicode_READY(left))
|
||||
goto error;
|
||||
if (PyUnicode_READY(right))
|
||||
goto error;
|
||||
|
||||
/* Don't resize for ascii += latin1. Convert ascii to latin1 requires
|
||||
to change the structure size, but characters are stored just after
|
||||
the structure, and so it requires to move all charactres which is
|
||||
|
|
|
@ -834,14 +834,21 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
|
|||
|
||||
case 'C': {/* unicode char */
|
||||
int *p = va_arg(*p_va, int *);
|
||||
if (PyUnicode_Check(arg) &&
|
||||
PyUnicode_GET_LENGTH(arg) == 1) {
|
||||
int kind = PyUnicode_KIND(arg);
|
||||
void *data = PyUnicode_DATA(arg);
|
||||
*p = PyUnicode_READ(kind, data, 0);
|
||||
}
|
||||
else
|
||||
int kind;
|
||||
void *data;
|
||||
|
||||
if (!PyUnicode_Check(arg))
|
||||
return converterr("a unicode character", arg, msgbuf, bufsize);
|
||||
|
||||
if (PyUnicode_READY(arg))
|
||||
RETURN_ERR_OCCURRED;
|
||||
|
||||
if (PyUnicode_GET_LENGTH(arg) != 1)
|
||||
return converterr("a unicode character", arg, msgbuf, bufsize);
|
||||
|
||||
kind = PyUnicode_KIND(arg);
|
||||
data = PyUnicode_DATA(arg);
|
||||
*p = PyUnicode_READ(kind, data, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue