Kaydet (Commit) b3f55012 authored tarafından Victor Stinner's avatar Victor Stinner

Close #15534: Fix a typo in the fast search function of the string library (_s => s)

Replace _s with ptr to avoid future confusion. Add also non regression tests.
üst 77821b68
...@@ -262,6 +262,9 @@ class BaseTest(unittest.TestCase): ...@@ -262,6 +262,9 @@ class BaseTest(unittest.TestCase):
# issue 7458 # issue 7458
self.checkequal(-1, 'ab', 'rfind', 'xxx', sys.maxsize + 1, 0) self.checkequal(-1, 'ab', 'rfind', 'xxx', sys.maxsize + 1, 0)
# issue #15534
self.checkequal(0, '<......\u043c...', "rfind", "<")
def test_index(self): def test_index(self):
self.checkequal(0, 'abcdefghiabc', 'index', '') self.checkequal(0, 'abcdefghiabc', 'index', '')
self.checkequal(3, 'abcdefghiabc', 'index', 'def') self.checkequal(3, 'abcdefghiabc', 'index', 'def')
...@@ -597,6 +600,8 @@ class BaseTest(unittest.TestCase): ...@@ -597,6 +600,8 @@ class BaseTest(unittest.TestCase):
EQ("ReyKKjavik", "Reykjavik", "replace", "k", "KK", 1) EQ("ReyKKjavik", "Reykjavik", "replace", "k", "KK", 1)
EQ("Reykjavik", "Reykjavik", "replace", "k", "KK", 0) EQ("Reykjavik", "Reykjavik", "replace", "k", "KK", 0)
EQ("A----B----C----", "A.B.C.", "replace", ".", "----") EQ("A----B----C----", "A.B.C.", "replace", ".", "----")
# issue #15534
EQ('...\u043c......&lt;', '...\u043c......<', "replace", "<", "&lt;")
EQ("Reykjavik", "Reykjavik", "replace", "q", "KK") EQ("Reykjavik", "Reykjavik", "replace", "q", "KK")
...@@ -1316,6 +1321,9 @@ class MixinStrUnicodeUserStringTest: ...@@ -1316,6 +1321,9 @@ class MixinStrUnicodeUserStringTest:
self.assertRaisesRegex(TypeError, r'^endswith\(', s.endswith, self.assertRaisesRegex(TypeError, r'^endswith\(', s.endswith,
x, None, None, None) x, None, None, None)
# issue #15534
self.checkequal(10, "...\u043c......<", "find", "<")
class MixinStrUnicodeTest: class MixinStrUnicodeTest:
# Additional tests that only work with str and unicode. # Additional tests that only work with str and unicode.
......
...@@ -10,6 +10,8 @@ What's New in Python 3.3.0 Beta 2? ...@@ -10,6 +10,8 @@ What's New in Python 3.3.0 Beta 2?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #15534: Fix the fast-search function for non-ASCII Unicode strings.
- Issue #15508: Fix the docstring for __import__ to have the proper default - Issue #15508: Fix the docstring for __import__ to have the proper default
value of 0 for 'level' and to not mention negative levels since they are value of 0 for 'level' and to not mention negative levels since they are
not supported. not supported.
...@@ -83,7 +85,7 @@ Library ...@@ -83,7 +85,7 @@ Library
- Issue #15499: Launching a webbrowser in Unix used to sleep for a few - Issue #15499: Launching a webbrowser in Unix used to sleep for a few
seconds. Original patch by Anton Barkovsky. seconds. Original patch by Anton Barkovsky.
- Issue #15463: the faulthandler module truncates strings to 500 characters, - Issue #15463: the faulthandler module truncates strings to 500 characters,
instead of 100, to be able to display long file paths instead of 100, to be able to display long file paths
......
...@@ -48,16 +48,16 @@ STRINGLIB(fastsearch_memchr_1char)(const STRINGLIB_CHAR* s, Py_ssize_t n, ...@@ -48,16 +48,16 @@ STRINGLIB(fastsearch_memchr_1char)(const STRINGLIB_CHAR* s, Py_ssize_t n,
} while (0) } while (0)
if (mode == FAST_SEARCH) { if (mode == FAST_SEARCH) {
const STRINGLIB_CHAR *_s = s; const STRINGLIB_CHAR *ptr = s;
const STRINGLIB_CHAR *e = s + n; const STRINGLIB_CHAR *e = s + n;
while (_s < e) { while (ptr < e) {
DO_MEMCHR(memchr, _s, needle, e - _s); DO_MEMCHR(memchr, ptr, needle, e - ptr);
if (found == NULL) if (found == NULL)
return -1; return -1;
if (sizeof(STRINGLIB_CHAR) == 1 || *found == ch) if (sizeof(STRINGLIB_CHAR) == 1 || *found == ch)
return (found - _s); return (found - s);
/* False positive */ /* False positive */
_s = found + 1; ptr = found + 1;
} }
return -1; return -1;
} }
......
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