diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index f5f4245ca21..4efa39cae15 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -107,6 +107,10 @@ test('find', u'abcdefghiabc', 9, u'abc', 1) test('find', u'abcdefghiabc', -1, u'def', 4) test('rfind', u'abcdefghiabc', 9, u'abc') +test('rfind', 'abcdefghiabc', 9, u'abc') +test('rfind', 'abcdefghiabc', 12, u'') +test('rfind', u'abcdefghiabc', 12, '') +test('rfind', u'abcdefghiabc', 12, u'') test('lower', u'HeLLo', u'hello') test('lower', u'hello', u'hello') @@ -241,6 +245,8 @@ test('endswith', u'helloworld', False, u'lowo', 4, 7) test('endswith', u'helloworld', False, u'lowo', 3, 8) test('endswith', u'ab', False, u'ab', 0, 1) test('endswith', u'ab', False, u'ab', 0, 0) +test('endswith', 'helloworld', True, u'd') +test('endswith', 'helloworld', False, u'l') test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi') test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi', 8) diff --git a/Misc/ACKS b/Misc/ACKS index 13a797bafdc..b77244eb46f 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -292,6 +292,7 @@ Soren Larsen Piers Lauder Chris Lawrence Christopher Lee +Inyeol Lee Luc Lefebvre Kip Lehman Marc-Andre Lemburg diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 7a48627324d..9f413175463 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -1536,7 +1536,7 @@ string_find_internal(PyStringObject *self, PyObject *args, int dir) } #ifdef Py_USING_UNICODE else if (PyUnicode_Check(subobj)) - return PyUnicode_Find((PyObject *)self, subobj, i, last, 1); + return PyUnicode_Find((PyObject *)self, subobj, i, last, dir); #endif else if (PyObject_AsCharBuffer(subobj, &sub, &n)) return -2; diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 4ac12a05518..b2649365ae3 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -2891,9 +2891,6 @@ int findstring(PyUnicodeObject *self, if (start < 0) start = 0; - if (substring->length == 0) - return start; - if (end > self->length) end = self->length; if (end < 0) @@ -2901,6 +2898,9 @@ int findstring(PyUnicodeObject *self, if (end < 0) end = 0; + if (substring->length == 0) + return (direction > 0) ? start : end; + end -= substring->length; if (direction < 0) {