diff options
author | Mai M <mathew1800@gmail.com> | 2021-10-15 17:04:44 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-15 17:04:44 -0400 |
commit | 764369f4c7ac60f6a985f613bee4a02a20afb88d (patch) | |
tree | 2333d6f81aba1757e5a88778e35ca8dc1239de36 /src/common/string_util.cpp | |
parent | d5c4af2d5b7f8d32f9845b424d73ec9c090c3465 (diff) | |
parent | 0d6057b2fa98f08a461edaf584e9ac75f7fdecde (diff) |
Merge pull request #7172 from Morph1984/out-of-bounds
string_util: Prevent out of bounds access in u16string_view buffer
Diffstat (limited to 'src/common/string_util.cpp')
-rw-r--r-- | src/common/string_util.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp index e6344fd41..662171138 100644 --- a/src/common/string_util.cpp +++ b/src/common/string_util.cpp @@ -180,20 +180,20 @@ std::wstring UTF8ToUTF16W(const std::string& input) { #endif -std::string StringFromFixedZeroTerminatedBuffer(const char* buffer, std::size_t max_len) { +std::string StringFromFixedZeroTerminatedBuffer(std::string_view buffer, std::size_t max_len) { std::size_t len = 0; - while (len < max_len && buffer[len] != '\0') + while (len < buffer.length() && len < max_len && buffer[len] != '\0') { ++len; - - return std::string(buffer, len); + } + return std::string(buffer.begin(), buffer.begin() + len); } std::u16string UTF16StringFromFixedZeroTerminatedBuffer(std::u16string_view buffer, std::size_t max_len) { std::size_t len = 0; - while (len < max_len && buffer[len] != '\0') + while (len < buffer.length() && len < max_len && buffer[len] != '\0') { ++len; - + } return std::u16string(buffer.begin(), buffer.begin() + len); } |