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.
......
...@@ -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