From 0fd60eb9b4026bcbc3a075e6aa9264346bcc25d1 Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Mon, 16 May 2016 21:23:07 +0100 Subject: [PATCH] Fix strstr16. strcmp needs a limit, otherwise it will compare the null terminator with the next character in the haystack, which results in the compare failing for all searches except where the needle is found at the very end. Bug: 28663748 Change-Id: I1939dc4037c2f2a75d617943b063d2d38a8c5e3a --- libutils/Unicode.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libutils/Unicode.cpp b/libutils/Unicode.cpp index ade896a02..f1f8bc939 100644 --- a/libutils/Unicode.cpp +++ b/libutils/Unicode.cpp @@ -292,6 +292,7 @@ size_t strnlen16(const char16_t *s, size_t maxlen) char16_t* strstr16(const char16_t* src, const char16_t* target) { const char16_t needle = *target++; + const size_t target_len = strlen16(target); if (needle != '\0') { do { do { @@ -299,7 +300,7 @@ char16_t* strstr16(const char16_t* src, const char16_t* target) return nullptr; } } while (*src++ != needle); - } while (strcmp16(src, target) != 0); + } while (strncmp16(src, target, target_len) != 0); src--; }