hivex_value_multiple_strings: Don't read uninitialized data.
[hivex.git] / lib / hivex.c
index b1f6ea6..d2ab23d 100644 (file)
@@ -1384,7 +1384,7 @@ utf16_string_len_in_bytes_max (const char *str, size_t len)
 {
   size_t ret = 0;
 
-  while (len > 0 && (str[0] || str[1])) {
+  while (len >= 2 && (str[0] || str[1])) {
     str += 2;
     ret += 2;
     len -= 2;
@@ -1421,7 +1421,8 @@ hivex_value_multiple_strings (hive_h *h, hive_value_h value)
   char *p = data;
   size_t plen;
 
-  while (p < data + len && (plen = utf16_string_len_in_bytes (p)) > 0) {
+  while (p < data + len &&
+         (plen = utf16_string_len_in_bytes_max (p, data + len - p)) > 0) {
     nr_strings++;
     char **ret2 = realloc (ret, (1 + nr_strings) * sizeof (char *));
     if (ret2 == NULL) {