summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2022-12-06 15:46:05 -0500
committerNat Goodspeed <nat@lindenlab.com>2022-12-06 15:46:05 -0500
commit9a7e638b67cda4bb1174a4d46fb7769290472ebc (patch)
tree71a96ab6079eeb9e025c70085148b504a0bb965a /indra
parentdb1d757aebc3dd23e542f7cd4f468dbcd97edcb7 (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.cpp24
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++;
}
}
}