diff options
-rw-r--r-- | Lib/test/string_tests.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 4 | ||||
-rw-r--r-- | Objects/stringlib/fastsearch.h | 10 |
3 files changed, 16 insertions, 6 deletions
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py index eeeb457..8da3e77 100644 --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -262,6 +262,9 @@ class BaseTest(unittest.TestCase): # issue 7458 self.checkequal(-1, 'ab', 'rfind', 'xxx', sys.maxsize + 1, 0) + # issue #15534 + self.checkequal(0, '<......\u043c...', "rfind", "<") + def test_index(self): self.checkequal(0, 'abcdefghiabc', 'index', '') self.checkequal(3, 'abcdefghiabc', 'index', 'def') @@ -597,6 +600,8 @@ class BaseTest(unittest.TestCase): EQ("ReyKKjavik", "Reykjavik", "replace", "k", "KK", 1) EQ("Reykjavik", "Reykjavik", "replace", "k", "KK", 0) EQ("A----B----C----", "A.B.C.", "replace", ".", "----") + # issue #15534 + EQ('...\u043c......<', '...\u043c......<', "replace", "<", "<") EQ("Reykjavik", "Reykjavik", "replace", "q", "KK") @@ -1316,6 +1321,9 @@ class MixinStrUnicodeUserStringTest: self.assertRaisesRegex(TypeError, r'^endswith\(', s.endswith, x, None, None, None) + # issue #15534 + self.checkequal(10, "...\u043c......<", "find", "<") + class MixinStrUnicodeTest: # Additional tests that only work with str and unicode. @@ -10,6 +10,8 @@ What's New in Python 3.3.0 Beta 2? 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 value of 0 for 'level' and to not mention negative levels since they are not supported. @@ -83,7 +85,7 @@ Library - Issue #15499: Launching a webbrowser in Unix used to sleep for a few seconds. Original patch by Anton Barkovsky. - + - Issue #15463: the faulthandler module truncates strings to 500 characters, instead of 100, to be able to display long file paths diff --git a/Objects/stringlib/fastsearch.h b/Objects/stringlib/fastsearch.h index f3e0461..5b8d5db 100644 --- a/Objects/stringlib/fastsearch.h +++ b/Objects/stringlib/fastsearch.h @@ -48,16 +48,16 @@ STRINGLIB(fastsearch_memchr_1char)(const STRINGLIB_CHAR* s, Py_ssize_t n, } while (0) if (mode == FAST_SEARCH) { - const STRINGLIB_CHAR *_s = s; + const STRINGLIB_CHAR *ptr = s; const STRINGLIB_CHAR *e = s + n; - while (_s < e) { - DO_MEMCHR(memchr, _s, needle, e - _s); + while (ptr < e) { + DO_MEMCHR(memchr, ptr, needle, e - ptr); if (found == NULL) return -1; if (sizeof(STRINGLIB_CHAR) == 1 || *found == ch) - return (found - _s); + return (found - s); /* False positive */ - _s = found + 1; + ptr = found + 1; } return -1; } |