fill_number() and format_string_internal() check for PyUnicode_CopyCharacters() failure

This commit is contained in:
Victor Stinner 2011-09-28 21:53:49 +02:00
parent dba2deeca2
commit fd85c3aa8d
1 changed files with 8 additions and 3 deletions

View File

@ -566,7 +566,10 @@ fill_number(PyObject *out, Py_ssize_t pos, const NumberFieldWidths *spec,
PyUnicode_WRITE(kind, data, pos++, spec->sign); PyUnicode_WRITE(kind, data, pos++, spec->sign);
} }
if (spec->n_prefix) { if (spec->n_prefix) {
PyUnicode_CopyCharacters(out, pos, prefix, p_start, spec->n_prefix); if (PyUnicode_CopyCharacters(out, pos,
prefix, p_start,
spec->n_prefix) < 0)
return -1;
if (toupper) { if (toupper) {
Py_ssize_t t; Py_ssize_t t;
/* XXX if the upper-case prefix is wider than the target /* XXX if the upper-case prefix is wider than the target
@ -632,7 +635,8 @@ fill_number(PyObject *out, Py_ssize_t pos, const NumberFieldWidths *spec,
} }
if (spec->n_remainder) { if (spec->n_remainder) {
PyUnicode_CopyCharacters(out, pos, digits, d_pos, spec->n_remainder); if (PyUnicode_CopyCharacters(out, pos, digits, d_pos, spec->n_remainder) < 0)
return -1;
pos += spec->n_remainder; pos += spec->n_remainder;
d_pos += spec->n_remainder; d_pos += spec->n_remainder;
} }
@ -735,7 +739,8 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format)
lpad, rpad); lpad, rpad);
/* Then the source string. */ /* Then the source string. */
PyUnicode_CopyCharacters(result, pos, value, 0, len); if (PyUnicode_CopyCharacters(result, pos, value, 0, len) < 0)
Py_CLEAR(result);
done: done:
return result; return result;