Don't check for the maximum character when copying from unicodeobject.c
* Create copy_characters() function which doesn't check for the maximum character in release mode * _PyUnicode_CheckConsistency() is no more static to be able to use it in _PyUnicode_FormatAdvanced() (in formatter_unicode.c) * _PyUnicode_CheckConsistency() checks the string hash
This commit is contained in:
@@ -1284,33 +1284,31 @@ _PyUnicode_FormatAdvanced(PyObject *obj,
|
||||
Py_ssize_t start, Py_ssize_t end)
|
||||
{
|
||||
InternalFormatSpec format;
|
||||
PyObject *result = NULL;
|
||||
PyObject *result;
|
||||
|
||||
/* check for the special case of zero length format spec, make
|
||||
it equivalent to str(obj) */
|
||||
if (start == end) {
|
||||
result = PyObject_Str(obj);
|
||||
goto done;
|
||||
}
|
||||
if (start == end)
|
||||
return PyObject_Str(obj);
|
||||
|
||||
/* parse the format_spec */
|
||||
if (!parse_internal_render_format_spec(format_spec, start, end,
|
||||
&format, 's', '<'))
|
||||
goto done;
|
||||
return NULL;
|
||||
|
||||
/* type conversion? */
|
||||
switch (format.type) {
|
||||
case 's':
|
||||
/* no type conversion needed, already a string. do the formatting */
|
||||
result = format_string_internal(obj, &format);
|
||||
if (result != NULL)
|
||||
assert(_PyUnicode_CheckConsistency(result, 1));
|
||||
break;
|
||||
default:
|
||||
/* unknown */
|
||||
unknown_presentation_type(format.type, obj->ob_type->tp_name);
|
||||
goto done;
|
||||
result = NULL;
|
||||
}
|
||||
|
||||
done:
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user