diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2022-12-06 15:46:05 -0500 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2022-12-06 15:46:05 -0500 |
commit | 9a7e638b67cda4bb1174a4d46fb7769290472ebc (patch) | |
tree | 71a96ab6079eeb9e025c70085148b504a0bb965a /indra | |
parent | db1d757aebc3dd23e542f7cd4f468dbcd97edcb7 (diff) |
DRTVWR-575: Defend unescape_string() against empty line.
The unsigned index arithmetic was problematic in that case.
Diffstat (limited to 'indra')
-rw-r--r-- | indra/llcommon/llstreamtools.cpp | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/indra/llcommon/llstreamtools.cpp b/indra/llcommon/llstreamtools.cpp index 1eccfda755..1ff15fcf89 100644 --- a/indra/llcommon/llstreamtools.cpp +++ b/indra/llcommon/llstreamtools.cpp @@ -331,8 +331,7 @@ bool remove_last_char(char c, std::string& line) void unescape_string(std::string& line) { auto line_size = line.size(); - size_t index = 0; - while (index < line_size - 1) + for (size_t index = 0; line_size >= 1 && index < line_size - 1; ++index) { if ('\\' == line[index]) { @@ -347,7 +346,6 @@ void unescape_string(std::string& line) line_size--; } } - index++; } } @@ -357,8 +355,7 @@ void unescape_string(std::string& line) void escape_string(std::string& line) { auto line_size = line.size(); - size_t index = 0; - while (index < line_size) + for (size_t index = 0; index < line_size; ++index) { if ('\\' == line[index]) { @@ -372,7 +369,6 @@ void escape_string(std::string& line) line_size++; index++; } - index++; } } @@ -380,23 +376,20 @@ void escape_string(std::string& line) void replace_newlines_with_whitespace(std::string& line) { auto line_size = line.size(); - size_t index = 0; - while (index < line_size) + for (size_t index = 0; index < line_size; ++index) { if ('\n' == line[index]) { line.replace(index, 1, " "); } - index++; } } // erases any double-quote characters in 'line' void remove_double_quotes(std::string& line) { - size_t index = 0; auto line_size = line.size(); - while (index < line_size) + for (size_t index = 0; index < line_size; ) { if ('"' == line[index]) { @@ -427,19 +420,18 @@ void get_keyword_and_value(std::string& keyword, auto line_size = line.size(); size_t line_index = 0; char c; - while (line_index < line_size) + for ( ; line_index < line_size; ++line_index) { c = line[line_index]; if (!LLStringOps::isSpace(c)) { break; } - line_index++; } // get the keyword keyword.clear(); - while (line_index < line_size) + for ( ; line_index < line_size; ++line_index) { c = line[line_index]; if (LLStringOps::isSpace(c) || '\r' == c || '\n' == c) @@ -447,7 +439,6 @@ void get_keyword_and_value(std::string& keyword, break; } keyword += c; - line_index++; } // get the value @@ -465,7 +456,7 @@ void get_keyword_and_value(std::string& keyword, line_index++; } - while (line_index < line_size) + for ( ; line_index < line_size; ++line_index) { c = line[line_index]; if ('\r' == c || '\n' == c) @@ -473,7 +464,6 @@ void get_keyword_and_value(std::string& keyword, break; } value += c; - line_index++; } } } |