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