]> granicus.if.org Git - python/commitdiff
Issue #23803: Fixed str.partition() and str.rpartition() when a separator
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 29 Mar 2015 16:21:02 +0000 (19:21 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Sun, 29 Mar 2015 16:21:02 +0000 (19:21 +0300)
is wider then partitioned string.

Lib/test/test_unicode.py
Misc/NEWS
Objects/unicodeobject.c

index 13a01f96cefe44dbfa894be6ad21ca16a2a4473c..5efbe3e42ca8e01ab54ac99f66025b3905672509 100644 (file)
@@ -375,6 +375,7 @@ class UnicodeTest(string_tests.CommonTest,
     def test_partition(self):
         string_tests.MixinStrUnicodeUserStringTest.test_partition(self)
         # test mixed kinds
+        self.checkequal(('ABCDEFGH', '', ''), 'ABCDEFGH', 'partition', '\u4200')
         for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
             left *= 9
             right *= 9
@@ -391,6 +392,7 @@ class UnicodeTest(string_tests.CommonTest,
     def test_rpartition(self):
         string_tests.MixinStrUnicodeUserStringTest.test_rpartition(self)
         # test mixed kinds
+        self.checkequal(('', '', 'ABCDEFGH'), 'ABCDEFGH', 'rpartition', '\u4200')
         for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
             left *= 9
             right *= 9
index 7075ef8d68a256967cb5cf641078278ee6e02bb2..c6b5e1ccbffe9ab62e7249a5b8ede18c50a04932 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ Release date: tba
 Core and Builtins
 -----------------
 
+- Issue #23803: Fixed str.partition() and str.rpartition() when a separator
+  is wider then partitioned string.
+
 - Issue #23192: Fixed generator lambdas.  Patch by Bruno Cauet.
 
 - Issue #23629: Fix the default __sizeof__ implementation for variable-sized
index 42cda589ccb653b5f39192a6fa3a50f553b6bf41..b425e43289c2a4f0df052fe38759739a06d6050e 100644 (file)
@@ -12681,7 +12681,7 @@ PyUnicode_Partition(PyObject *str_in, PyObject *sep_in)
     len1 = PyUnicode_GET_LENGTH(str_obj);
     len2 = PyUnicode_GET_LENGTH(sep_obj);
 
-    switch (PyUnicode_KIND(str_obj)) {
+    switch (kind) {
     case PyUnicode_1BYTE_KIND:
         if (PyUnicode_IS_ASCII(str_obj) && PyUnicode_IS_ASCII(sep_obj))
             out = asciilib_partition(str_obj, buf1, len1, sep_obj, buf2, len2);
@@ -12737,12 +12737,12 @@ PyUnicode_RPartition(PyObject *str_in, PyObject *sep_in)
         return NULL;
     }
 
-    kind1 = PyUnicode_KIND(str_in);
+    kind1 = PyUnicode_KIND(str_obj);
     kind2 = PyUnicode_KIND(sep_obj);
     kind = Py_MAX(kind1, kind2);
-    buf1 = PyUnicode_DATA(str_in);
+    buf1 = PyUnicode_DATA(str_obj);
     if (kind1 != kind)
-        buf1 = _PyUnicode_AsKind(str_in, kind);
+        buf1 = _PyUnicode_AsKind(str_obj, kind);
     if (!buf1)
         goto onError;
     buf2 = PyUnicode_DATA(sep_obj);
@@ -12753,7 +12753,7 @@ PyUnicode_RPartition(PyObject *str_in, PyObject *sep_in)
     len1 = PyUnicode_GET_LENGTH(str_obj);
     len2 = PyUnicode_GET_LENGTH(sep_obj);
 
-    switch (PyUnicode_KIND(str_in)) {
+    switch (kind) {
     case PyUnicode_1BYTE_KIND:
         if (PyUnicode_IS_ASCII(str_obj) && PyUnicode_IS_ASCII(sep_obj))
             out = asciilib_rpartition(str_obj, buf1, len1, sep_obj, buf2, len2);