]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
_copy_characters() fails more quickly in debug mode on inconsistent state
authorVictor Stinner <victor.stinner@haypocalc.com>
Thu, 6 Oct 2011 00:47:11 +0000 (02:47 +0200)
committerVictor Stinner <victor.stinner@haypocalc.com>
Thu, 6 Oct 2011 00:47:11 +0000 (02:47 +0200)
Objects/unicodeobject.c

index 21cafb32515118234f0333f49ca9b05fa829d501..a64f795fe38c4c6ce44ab7ea2e3de258ca89e2da 100644 (file)
@@ -1052,20 +1052,32 @@ _copy_characters(PyObject *to, Py_ssize_t to_start,
             Py_UCS4 ch;
             Py_ssize_t i;
 
+#ifdef Py_DEBUG
             for (i=0; i < how_many; i++) {
                 ch = PyUnicode_READ(from_kind, from_data, from_start + i);
-                if (check_maxchar) {
+                assert(ch <= to_maxchar);
+                PyUnicode_WRITE(to_kind, to_data, to_start + i, ch);
+            }
+#else
+            if (!check_maxchar) {
+                for (i=0; i < how_many; i++) {
+                    ch = PyUnicode_READ(from_kind, from_data, from_start + i);
+                    PyUnicode_WRITE(to_kind, to_data, to_start + i, ch);
+                }
+            }
+            else {
+                for (i=0; i < how_many; i++) {
+                    ch = PyUnicode_READ(from_kind, from_data, from_start + i);
                     if (ch > to_maxchar)
                         return 1;
+                    PyUnicode_WRITE(to_kind, to_data, to_start + i, ch);
                 }
-                else {
-                    assert(ch <= to_maxchar);
-                }
-                PyUnicode_WRITE(to_kind, to_data, to_start + i, ch);
             }
+#endif
         }
         else {
-            return -1;
+            assert(0 && "inconsistent state");
+            return 1;
         }
     }
     return 0;