Просмотр исходного кода

Merge pull request #7172 from Morph1984/out-of-bounds

string_util: Prevent out of bounds access in u16string_view buffer
Mai M 4 лет назад
Родитель
Сommit
764369f4c7
2 измененных файлов с 7 добавлено и 7 удалено
  1. 6 6
      src/common/string_util.cpp
  2. 1 1
      src/common/string_util.h

+ 6 - 6
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);
 }
 

+ 1 - 1
src/common/string_util.h

@@ -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);
 
 /**