Issue #3751: str.rpartition would perform a left-partition when called with

a unicode argument.

Backport of r66119
This commit is contained in:
Amaury Forgeot d'Arc 2008-09-01 20:05:08 +00:00
parent 50b1c4920b
commit afa0d58a2d
3 changed files with 9 additions and 1 deletions

View File

@ -1066,6 +1066,9 @@ class MixinStrUnicodeUserStringTest:
self.checkraises(ValueError, S, 'partition', '') self.checkraises(ValueError, S, 'partition', '')
self.checkraises(TypeError, S, 'partition', None) self.checkraises(TypeError, S, 'partition', None)
# mixed use of str and unicode
self.assertEqual('a/b/c'.partition(u'/'), ('a', '/', 'b/c'))
def test_rpartition(self): def test_rpartition(self):
self.checkequal(('this is the rparti', 'ti', 'on method'), self.checkequal(('this is the rparti', 'ti', 'on method'),
@ -1081,6 +1084,8 @@ class MixinStrUnicodeUserStringTest:
self.checkraises(ValueError, S, 'rpartition', '') self.checkraises(ValueError, S, 'rpartition', '')
self.checkraises(TypeError, S, 'rpartition', None) self.checkraises(TypeError, S, 'rpartition', None)
# mixed use of str and unicode
self.assertEqual('a/b/c'.rpartition(u'/'), ('a/b', '/', 'c'))
class MixinStrStringUserStringTest: class MixinStrStringUserStringTest:
# Additional tests for 8bit strings, i.e. str, UserString and # Additional tests for 8bit strings, i.e. str, UserString and

View File

@ -12,6 +12,9 @@ What's New in Python 2.5.3?
Core and builtins Core and builtins
----------------- -----------------
- Issue #3751: str.rpartition would perform a left-partition when called with
a unicode argument.
- Issue #3537: Fix an assertion failure when an empty but presized dict - Issue #3537: Fix an assertion failure when an empty but presized dict
object was stored in the freelist. object was stored in the freelist.

View File

@ -1595,7 +1595,7 @@ string_rpartition(PyStringObject *self, PyObject *sep_obj)
} }
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
else if (PyUnicode_Check(sep_obj)) else if (PyUnicode_Check(sep_obj))
return PyUnicode_Partition((PyObject *) self, sep_obj); return PyUnicode_RPartition((PyObject *) self, sep_obj);
#endif #endif
else if (PyObject_AsCharBuffer(sep_obj, &sep, &sep_len)) else if (PyObject_AsCharBuffer(sep_obj, &sep, &sep_len))
return NULL; return NULL;