diff Python/formatter_unicode.c @ 72497:f05c2df39ea8

fill_number() and format_string_internal() check for PyUnicode_CopyCharacters() failure
author Victor Stinner <victor.stinner@haypocalc.com>
date Wed, 28 Sep 2011 21:53:49 +0200
parents ad337be523bf
children 05ed6e5f2cf4
line wrap: on
line diff
--- a/Python/formatter_unicode.c	Wed Sep 28 21:50:42 2011 +0200
+++ b/Python/formatter_unicode.c	Wed Sep 28 21:53:49 2011 +0200
@@ -566,7 +566,10 @@
         PyUnicode_WRITE(kind, data, pos++, spec->sign);
     }
     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) {
             Py_ssize_t t;
             /* XXX if the upper-case prefix is wider than the target
@@ -632,7 +635,8 @@
     }
 
     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;
         d_pos += spec->n_remainder;
     }
@@ -735,7 +739,8 @@
                        lpad, rpad);
 
     /* Then the source string. */
-    PyUnicode_CopyCharacters(result, pos, value, 0, len);
+    if (PyUnicode_CopyCharacters(result, pos, value, 0, len) < 0)
+        Py_CLEAR(result);
 
 done:
     return result;