aboutsummaryrefslogtreecommitdiff
path: root/src/common/string_util.cpp
diff options
context:
space:
mode:
authorMai M <mathew1800@gmail.com>2021-10-15 17:04:44 -0400
committerGitHub <noreply@github.com>2021-10-15 17:04:44 -0400
commit23b73efabc5324873a8a95e94e826e1510ddcd77 (patch)
tree2333d6f81aba1757e5a88778e35ca8dc1239de36 /src/common/string_util.cpp
parent8a973b20d2a0db20d44062df94ab0347748e2b03 (diff)
parent49ae05213e45a898863401a5f65f8b4b9242a6c2 (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.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp
index e6344fd415..6621711386 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);
}