Commit 76afbd9a authored by Guido van Rossum's avatar Guido van Rossum

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.
parent c230b0e1
...@@ -107,6 +107,10 @@ test('find', u'abcdefghiabc', 9, u'abc', 1) ...@@ -107,6 +107,10 @@ test('find', u'abcdefghiabc', 9, u'abc', 1)
test('find', u'abcdefghiabc', -1, u'def', 4) test('find', u'abcdefghiabc', -1, u'def', 4)
test('rfind', u'abcdefghiabc', 9, u'abc') 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')
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) ...@@ -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'helloworld', False, u'lowo', 3, 8)
test('endswith', u'ab', False, u'ab', 0, 1) test('endswith', u'ab', False, u'ab', 0, 1)
test('endswith', u'ab', False, u'ab', 0, 0) 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')
test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi', 8) test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab def\ng hi', 8)
......
...@@ -292,6 +292,7 @@ Soren Larsen ...@@ -292,6 +292,7 @@ Soren Larsen
Piers Lauder Piers Lauder
Chris Lawrence Chris Lawrence
Christopher Lee Christopher Lee
Inyeol Lee
Luc Lefebvre Luc Lefebvre
Kip Lehman Kip Lehman
Marc-Andre Lemburg Marc-Andre Lemburg
......
...@@ -1536,7 +1536,7 @@ string_find_internal(PyStringObject *self, PyObject *args, int dir) ...@@ -1536,7 +1536,7 @@ string_find_internal(PyStringObject *self, PyObject *args, int dir)
} }
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
else if (PyUnicode_Check(subobj)) else if (PyUnicode_Check(subobj))
return PyUnicode_Find((PyObject *)self, subobj, i, last, 1); return PyUnicode_Find((PyObject *)self, subobj, i, last, dir);
#endif #endif
else if (PyObject_AsCharBuffer(subobj, &sub, &n)) else if (PyObject_AsCharBuffer(subobj, &sub, &n))
return -2; return -2;
......
...@@ -2891,9 +2891,6 @@ int findstring(PyUnicodeObject *self, ...@@ -2891,9 +2891,6 @@ int findstring(PyUnicodeObject *self,
if (start < 0) if (start < 0)
start = 0; start = 0;
if (substring->length == 0)
return start;
if (end > self->length) if (end > self->length)
end = self->length; end = self->length;
if (end < 0) if (end < 0)
...@@ -2901,6 +2898,9 @@ int findstring(PyUnicodeObject *self, ...@@ -2901,6 +2898,9 @@ int findstring(PyUnicodeObject *self,
if (end < 0) if (end < 0)
end = 0; end = 0;
if (substring->length == 0)
return (direction > 0) ? start : end;
end -= substring->length; end -= substring->length;
if (direction < 0) { if (direction < 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment