Unicode replace() method with empty pattern argument should fail, like
it does for 8-bit strings.
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 429b673..a915b2e 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -206,6 +206,12 @@
test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@')
test('replace', u'one!two!three!', u'one!two!three!', u'x', u'@')
test('replace', u'one!two!three!', u'one!two!three!', u'x', u'@', 2)
+try:
+ u"abc".replace(u"", u"x")
+except ValueError:
+ pass
+else:
+ raise TestFailed, "u.replace('', ...) should raise ValueError"
test('startswith', u'hello', True, u'he')
test('startswith', u'hello', True, u'hello')
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 03b5dbd..d6fd62a 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -3455,6 +3455,11 @@
{
PyUnicodeObject *u;
+ if (str1->length == 0) {
+ PyErr_SetString(PyExc_ValueError, "empty pattern string");
+ return NULL;
+ }
+
if (maxcount < 0)
maxcount = INT_MAX;