Browse Source
Merge pull request #7172 from Morph1984/out-of-bounds
string_util: Prevent out of bounds access in u16string_view buffer
pull/15/merge
Mai M
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
7 additions and
7 deletions
-
src/common/string_util.cpp
-
src/common/string_util.h
|
|
|
@ -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); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -63,7 +63,7 @@ template <typename InIt> |
|
|
|
* Creates a std::string from a fixed-size NUL-terminated char buffer. If the buffer isn't |
|
|
|
* NUL-terminated then the string ends at max_len characters. |
|
|
|
*/ |
|
|
|
[[nodiscard]] std::string StringFromFixedZeroTerminatedBuffer(const char* buffer, |
|
|
|
[[nodiscard]] std::string StringFromFixedZeroTerminatedBuffer(std::string_view buffer, |
|
|
|
std::size_t max_len); |
|
|
|
|
|
|
|
/** |
|
|
|
|