mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00
Issue #24284: The startswith and endswith methods of the str class no longer
return True when finding the empty string and the indexes are completely out of range.
This commit is contained in:
commit
442a894d1e
4 changed files with 17 additions and 3 deletions
|
@ -1049,6 +1049,10 @@ Changes in the Python API
|
|||
program depends on patching the module level variable to capture the debug
|
||||
output, you will need to update it to capture sys.stderr instead.
|
||||
|
||||
* The :meth:`str.startswith` and :meth:`str.endswith` methods no longer return
|
||||
``True`` when finding the empty string and the indexes are completely out of
|
||||
range. See :issue:`24284`.
|
||||
|
||||
Changes in the C API
|
||||
--------------------
|
||||
|
||||
|
|
|
@ -976,6 +976,9 @@ class MixinStrUnicodeUserStringTest:
|
|||
self.checkequal(True, 'helloworld', 'startswith', 'lowo', 3)
|
||||
self.checkequal(True, 'helloworld', 'startswith', 'lowo', 3, 7)
|
||||
self.checkequal(False, 'helloworld', 'startswith', 'lowo', 3, 6)
|
||||
self.checkequal(True, '', 'startswith', '', 0, 1)
|
||||
self.checkequal(True, '', 'startswith', '', 0, 0)
|
||||
self.checkequal(False, '', 'startswith', '', 1, 0)
|
||||
|
||||
# test negative indices
|
||||
self.checkequal(True, 'hello', 'startswith', 'he', 0, -1)
|
||||
|
@ -1022,6 +1025,9 @@ class MixinStrUnicodeUserStringTest:
|
|||
self.checkequal(False, 'helloworld', 'endswith', 'lowo', 3, 8)
|
||||
self.checkequal(False, 'ab', 'endswith', 'ab', 0, 1)
|
||||
self.checkequal(False, 'ab', 'endswith', 'ab', 0, 0)
|
||||
self.checkequal(True, '', 'endswith', '', 0, 1)
|
||||
self.checkequal(True, '', 'endswith', '', 0, 0)
|
||||
self.checkequal(False, '', 'endswith', '', 1, 0)
|
||||
|
||||
# test negative indices
|
||||
self.checkequal(True, 'hello', 'endswith', 'lo', -2)
|
||||
|
|
|
@ -22,6 +22,10 @@ Release date: 2015-07-05
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #24284: The startswith and endswith methods of the str class no longer
|
||||
return True when finding the empty string and the indexes are completely out
|
||||
of range.
|
||||
|
||||
- Issue #24115: Update uses of PyObject_IsTrue(), PyObject_Not(),
|
||||
PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains()
|
||||
to check for and handle errors correctly.
|
||||
|
|
|
@ -9280,14 +9280,14 @@ tailmatch(PyObject *self,
|
|||
PyUnicode_READY(substring) == -1)
|
||||
return -1;
|
||||
|
||||
if (PyUnicode_GET_LENGTH(substring) == 0)
|
||||
return 1;
|
||||
|
||||
ADJUST_INDICES(start, end, PyUnicode_GET_LENGTH(self));
|
||||
end -= PyUnicode_GET_LENGTH(substring);
|
||||
if (end < start)
|
||||
return 0;
|
||||
|
||||
if (PyUnicode_GET_LENGTH(substring) == 0)
|
||||
return 1;
|
||||
|
||||
kind_self = PyUnicode_KIND(self);
|
||||
data_self = PyUnicode_DATA(self);
|
||||
kind_sub = PyUnicode_KIND(substring);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue