mirror of https://github.com/python/cpython
Merge.
This commit is contained in:
commit
4637309ee6
|
@ -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);
|
||||
|
@ -2625,10 +2629,12 @@ PyUnicode_Decode(const char *s,
|
|||
goto onError;
|
||||
}
|
||||
Py_DECREF(buffer);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&unicode)) {
|
||||
Py_DECREF(unicode);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return unicode;
|
||||
|
||||
onError:
|
||||
|
@ -3674,10 +3680,12 @@ utf7Error:
|
|||
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&unicode)) {
|
||||
Py_DECREF(unicode);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)unicode;
|
||||
|
||||
onError:
|
||||
|
@ -4244,10 +4252,12 @@ PyUnicode_DecodeUTF8Stateful(const char *s,
|
|||
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&unicode)) {
|
||||
Py_DECREF(unicode);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)unicode;
|
||||
|
||||
onError:
|
||||
|
@ -4747,10 +4757,12 @@ PyUnicode_DecodeUTF32Stateful(const char *s,
|
|||
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&unicode)) {
|
||||
Py_DECREF(unicode);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)unicode;
|
||||
|
||||
onError:
|
||||
|
@ -5145,10 +5157,12 @@ PyUnicode_DecodeUTF16Stateful(const char *s,
|
|||
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&unicode)) {
|
||||
Py_DECREF(unicode);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)unicode;
|
||||
|
||||
onError:
|
||||
|
@ -5604,10 +5618,12 @@ PyUnicode_DecodeUnicodeEscape(const char *s,
|
|||
}
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&v)) {
|
||||
Py_DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)v;
|
||||
|
||||
ucnhashError:
|
||||
|
@ -5905,10 +5921,12 @@ PyUnicode_DecodeRawUnicodeEscape(const char *s,
|
|||
goto onError;
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&v)) {
|
||||
Py_DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)v;
|
||||
|
||||
onError:
|
||||
|
@ -6093,10 +6111,12 @@ _PyUnicode_DecodeUnicodeInternal(const char *s,
|
|||
goto onError;
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&v)) {
|
||||
Py_DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)v;
|
||||
|
||||
onError:
|
||||
|
@ -6519,10 +6539,12 @@ PyUnicode_DecodeASCII(const char *s,
|
|||
goto onError;
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&v)) {
|
||||
Py_DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)v;
|
||||
|
||||
onError:
|
||||
|
@ -6713,10 +6735,12 @@ PyUnicode_DecodeMBCSStateful(const char *s,
|
|||
goto retry;
|
||||
}
|
||||
#endif
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&v)) {
|
||||
Py_DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)v;
|
||||
}
|
||||
|
||||
|
@ -7012,10 +7036,12 @@ PyUnicode_DecodeCharmap(const char *s,
|
|||
goto onError;
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&v)) {
|
||||
Py_DECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject *)v;
|
||||
|
||||
onError:
|
||||
|
@ -8057,10 +8083,12 @@ PyUnicode_TransformDecimalToASCII(Py_UNICODE *s,
|
|||
p[i] = '0' + decimal;
|
||||
}
|
||||
}
|
||||
if (PyUnicode_READY((PyUnicodeObject*)result) == -1) {
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&result)) {
|
||||
Py_DECREF(result);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
/* --- Decimal Encoder ---------------------------------------------------- */
|
||||
|
@ -10038,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
|
||||
|
@ -10265,10 +10293,12 @@ unicode_expandtabs(PyUnicodeObject *self, PyObject *args)
|
|||
}
|
||||
}
|
||||
assert (j == PyUnicode_GET_LENGTH(u));
|
||||
if (PyUnicode_READY(u)) {
|
||||
#ifndef DONT_MAKE_RESULT_READY
|
||||
if (_PyUnicode_READY_REPLACE(&u)) {
|
||||
Py_DECREF(u);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
return (PyObject*) u;
|
||||
|
||||
overflow:
|
||||
|
@ -12923,7 +12953,7 @@ unicode_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
if (unicode == NULL)
|
||||
return NULL;
|
||||
assert(_PyUnicode_CHECK(unicode));
|
||||
if (_PyUnicode_READY_REPLACE(&unicode))
|
||||
if (PyUnicode_READY(unicode))
|
||||
return NULL;
|
||||
|
||||
self = (PyUnicodeObject *) type->tp_alloc(type, 0);
|
||||
|
@ -13131,7 +13161,7 @@ PyUnicode_InternInPlace(PyObject **p)
|
|||
if (PyUnicode_CHECK_INTERNED(s))
|
||||
return;
|
||||
if (_PyUnicode_READY_REPLACE(p)) {
|
||||
assert(0 && "PyUnicode_READY fail in PyUnicode_InternInPlace");
|
||||
assert(0 && "_PyUnicode_READY_REPLACE fail in PyUnicode_InternInPlace");
|
||||
return;
|
||||
}
|
||||
s = (PyUnicodeObject *)(*p);
|
||||
|
@ -13217,8 +13247,10 @@ _Py_ReleaseInternedUnicodeStrings(void)
|
|||
n);
|
||||
for (i = 0; i < n; i++) {
|
||||
s = (PyUnicodeObject *) PyList_GET_ITEM(keys, i);
|
||||
if (PyUnicode_READY(s) == -1)
|
||||
if (PyUnicode_READY(s) == -1) {
|
||||
assert(0 && "could not ready string");
|
||||
fprintf(stderr, "could not ready string\n");
|
||||
}
|
||||
switch (PyUnicode_CHECK_INTERNED(s)) {
|
||||
case SSTATE_NOT_INTERNED:
|
||||
/* XXX Shouldn't happen */
|
||||
|
|
|
@ -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