]> granicus.if.org Git - python/commitdiff
Fix some endcase bugs in unicode rfind()/rindex() and endswith().
authorGuido van Rossum <guido@python.org>
Tue, 20 Aug 2002 17:29:29 +0000 (17:29 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 20 Aug 2002 17:29:29 +0000 (17:29 +0000)
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.

Lib/test/test_unicode.py
Misc/ACKS
Objects/stringobject.c
Objects/unicodeobject.c

index f5f4245ca21a336821a79fe588a11fc728db52ed..4efa39cae1548cd1444cc0115595ef1a7dd9ffad 100644 (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)
index 13a797bafdc1444f6412617e00190e31f9944078..b77244eb46f11dbf54c49bd85589ab22b786e4d8 100644 (file)
--- 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
index 7a48627324d2575f5a3126b23bcf8caa90d2f132..9f413175463d115fbbe0f692b145725f8059a44e 100644 (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;
index 4ac12a05518309f04be6be5dd6ec75bd8ccc7aa0..b2649365ae3803123e2b533eb20659ebcf2cffa8 100644 (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) {