Fix some endcase bugs in unicode rfind()/rindex() and endswith().

These were reported and fixed by Inyeol Lee in SF bug 595350.  The
endswith() bug was already fixed in 2.3, but this adds some more test
cases.
This commit is contained in:
Guido van Rossum 2002-08-20 17:29:29 +00:00
parent c230b0e1f9
commit 76afbd9aa4
4 changed files with 11 additions and 4 deletions

View File

@ -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)

View File

@ -292,6 +292,7 @@ Soren Larsen
Piers Lauder
Chris Lawrence
Christopher Lee
Inyeol Lee
Luc Lefebvre
Kip Lehman
Marc-Andre Lemburg

View File

@ -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;

View File

@ -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) {