mirror of https://github.com/python/cpython
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:
parent
c230b0e1f9
commit
76afbd9aa4
|
@ -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)
|
||||
|
|
|
@ -292,6 +292,7 @@ Soren Larsen
|
|||
Piers Lauder
|
||||
Chris Lawrence
|
||||
Christopher Lee
|
||||
Inyeol Lee
|
||||
Luc Lefebvre
|
||||
Kip Lehman
|
||||
Marc-Andre Lemburg
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue