summaryrefslogtreecommitdiff
path: root/libutils/Unicode.cpp
diff options
context:
space:
mode:
authorMichael Wright <michaelwr@google.com>2016-05-16 21:23:07 +0100
committerMichael Wright <michaelwr@google.com>2016-05-16 21:23:07 +0100
commit60d68715581bb597dfbc32e1fabdb1cab36c592c (patch)
tree65adab33efa2b91c69e38ee659e898efa6a2d359 /libutils/Unicode.cpp
parent118640b3bbaff32600de42132526a82fb41e767a (diff)
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
Diffstat (limited to 'libutils/Unicode.cpp')
-rw-r--r--libutils/Unicode.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/libutils/Unicode.cpp b/libutils/Unicode.cpp
index ade896a02d..f1f8bc9393 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--;
}