mirror of
https://github.com/python/cpython.git
synced 2025-11-13 23:46:24 +00:00
(Merge 3.3) Issue #17223: Fix PyUnicode_FromUnicode() for string of 1 character
outside the range U+0000-U+10ffff.
This commit is contained in:
commit
36025478bf
2 changed files with 10 additions and 7 deletions
|
|
@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #17223: Fix PyUnicode_FromUnicode() for string of 1 character outside
|
||||||
|
the range U+0000-U+10ffff.
|
||||||
|
|
||||||
- Issue #17275: Corrected class name in init error messages of the C version of
|
- Issue #17275: Corrected class name in init error messages of the C version of
|
||||||
BufferedWriter and BufferedRandom.
|
BufferedWriter and BufferedRandom.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -241,7 +241,7 @@ static int unicode_modifiable(PyObject *unicode);
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
_PyUnicode_FromUCS1(const unsigned char *s, Py_ssize_t size);
|
_PyUnicode_FromUCS1(const Py_UCS1 *s, Py_ssize_t size);
|
||||||
static PyObject *
|
static PyObject *
|
||||||
_PyUnicode_FromUCS2(const Py_UCS2 *s, Py_ssize_t size);
|
_PyUnicode_FromUCS2(const Py_UCS2 *s, Py_ssize_t size);
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
@ -432,7 +432,7 @@ unicode_result_wchar(PyObject *unicode)
|
||||||
|
|
||||||
if (len == 1) {
|
if (len == 1) {
|
||||||
wchar_t ch = _PyUnicode_WSTR(unicode)[0];
|
wchar_t ch = _PyUnicode_WSTR(unicode)[0];
|
||||||
if (ch < 256) {
|
if ((Py_UCS4)ch < 256) {
|
||||||
PyObject *latin1_char = get_latin1_char((unsigned char)ch);
|
PyObject *latin1_char = get_latin1_char((unsigned char)ch);
|
||||||
Py_DECREF(unicode);
|
Py_DECREF(unicode);
|
||||||
return latin1_char;
|
return latin1_char;
|
||||||
|
|
@ -1757,7 +1757,7 @@ PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)
|
||||||
|
|
||||||
/* Single character Unicode objects in the Latin-1 range are
|
/* Single character Unicode objects in the Latin-1 range are
|
||||||
shared when using this constructor */
|
shared when using this constructor */
|
||||||
if (size == 1 && *u < 256)
|
if (size == 1 && (Py_UCS4)*u < 256)
|
||||||
return get_latin1_char((unsigned char)*u);
|
return get_latin1_char((unsigned char)*u);
|
||||||
|
|
||||||
/* If not empty and not single character, copy the Unicode data
|
/* If not empty and not single character, copy the Unicode data
|
||||||
|
|
@ -1865,7 +1865,7 @@ _PyUnicode_FromASCII(const char *buffer, Py_ssize_t size)
|
||||||
PyObject *unicode;
|
PyObject *unicode;
|
||||||
if (size == 1) {
|
if (size == 1) {
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
assert(s[0] < 128);
|
assert((unsigned char)s[0] < 128);
|
||||||
#endif
|
#endif
|
||||||
return get_latin1_char(s[0]);
|
return get_latin1_char(s[0]);
|
||||||
}
|
}
|
||||||
|
|
@ -1907,7 +1907,7 @@ align_maxchar(Py_UCS4 maxchar)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
_PyUnicode_FromUCS1(const unsigned char* u, Py_ssize_t size)
|
_PyUnicode_FromUCS1(const Py_UCS1* u, Py_ssize_t size)
|
||||||
{
|
{
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
unsigned char max_char;
|
unsigned char max_char;
|
||||||
|
|
@ -2792,8 +2792,8 @@ PyUnicode_FromOrdinal(int ordinal)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ordinal < 256)
|
if ((Py_UCS4)ordinal < 256)
|
||||||
return get_latin1_char(ordinal);
|
return get_latin1_char((unsigned char)ordinal);
|
||||||
|
|
||||||
v = PyUnicode_New(1, ordinal);
|
v = PyUnicode_New(1, ordinal);
|
||||||
if (v == NULL)
|
if (v == NULL)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue