parser: use indexing to get string offsets
Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
@@ -143,7 +143,7 @@ namespace stdex
|
||||
// Entity end
|
||||
utf32_t buf32[2];
|
||||
size_t n = chr_end - start - 1;
|
||||
auto entity_w = utf32_to_wstr(sgml2uni(text + start + 1, n, buf32), buf);
|
||||
auto entity_w = utf32_to_wstr(sgml2uni(&text[start + 1], n, buf32), buf);
|
||||
if (entity_w) {
|
||||
chr_end++;
|
||||
return entity_w;
|
||||
@@ -834,8 +834,8 @@ namespace stdex
|
||||
m = m_str.size(),
|
||||
n = std::min<size_t>(end - start, m);
|
||||
bool r = ((flags & match_case_insensitive) ?
|
||||
stdex::strnicmp(text + start, n, m_str.data(), m, this->m_locale) :
|
||||
stdex::strncmp(text + start, n, m_str.data(), m)) == 0;
|
||||
stdex::strnicmp(&text[start], n, m_str.data(), m, this->m_locale) :
|
||||
stdex::strncmp(&text[start], n, m_str.data(), m)) == 0;
|
||||
if (r) {
|
||||
this->interval.end = (this->interval.start = start) + n;
|
||||
return true;
|
||||
@@ -4527,7 +4527,7 @@ namespace stdex
|
||||
m_rparenthesis->invalidate();
|
||||
|
||||
if (m_plus_sign && m_plus_sign->match(text, this->interval.end, end, flags)) {
|
||||
value.append(text + m_plus_sign->interval.start, text + m_plus_sign->interval.end);
|
||||
value.append(&text[m_plus_sign->interval.start], &text[m_plus_sign->interval.end]);
|
||||
safe_value_size = value.size();
|
||||
this->interval.end = m_plus_sign->interval.end;
|
||||
}
|
||||
@@ -4538,7 +4538,7 @@ namespace stdex
|
||||
break;
|
||||
if (m_digit->match(text, this->interval.end, end, flags)) {
|
||||
// Digit
|
||||
value.append(text + m_digit->interval.start, text + m_digit->interval.end);
|
||||
value.append(&text[m_digit->interval.start], &text[m_digit->interval.end]);
|
||||
this->interval.end = m_digit->interval.end;
|
||||
if (!in_parentheses) {
|
||||
safe_digit_end = this->interval.end;
|
||||
@@ -4554,7 +4554,7 @@ namespace stdex
|
||||
m_lparenthesis->match(text, this->interval.end, end, flags))
|
||||
{
|
||||
// Left parenthesis
|
||||
value.append(text + m_lparenthesis->interval.start, m_lparenthesis->interval.size());
|
||||
value.append(&text[m_lparenthesis->interval.start], m_lparenthesis->interval.size());
|
||||
this->interval.end = m_lparenthesis->interval.end;
|
||||
in_parentheses = true;
|
||||
after_digit = false;
|
||||
@@ -4567,7 +4567,7 @@ namespace stdex
|
||||
m_lparenthesis->hit_offset == m_rparenthesis->hit_offset) // Left and right parentheses must match
|
||||
{
|
||||
// Right parenthesis
|
||||
value.append(text + m_rparenthesis->interval.start, text + m_rparenthesis->interval.end);
|
||||
value.append(&text[m_rparenthesis->interval.start], &text[m_rparenthesis->interval.end]);
|
||||
this->interval.end = m_rparenthesis->interval.end;
|
||||
safe_digit_end = this->interval.end;
|
||||
safe_value_size = value.size();
|
||||
@@ -5257,57 +5257,57 @@ namespace stdex
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(
|
||||
text + this->part1.interval.start, this->part1.interval.size(),
|
||||
text + this->part2.interval.start, this->part2.interval.size(),
|
||||
text + this->part3.interval.start, this->part3.interval.size()) :
|
||||
&text[this->part1.interval.start], this->part1.interval.size(),
|
||||
&text[this->part2.interval.start], this->part2.interval.size(),
|
||||
&text[this->part3.interval.start], this->part3.interval.size()) :
|
||||
this->part2.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() <= 20 &&
|
||||
check11(
|
||||
text + this->part1.interval.start, this->part1.interval.size(),
|
||||
text + this->part2.interval.start, this->part2.interval.size()) :
|
||||
&text[this->part1.interval.start], this->part1.interval.size(),
|
||||
&text[this->part2.interval.start], this->part2.interval.size()) :
|
||||
this->part1.interval ?
|
||||
this->part1.interval.size() <= 12 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) :
|
||||
false;
|
||||
else if (this->model[0] == '0' && this->model[1] == '2')
|
||||
is_valid =
|
||||
this->part3.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(text + this->part2.interval.start, this->part2.interval.size()) &&
|
||||
check11(text + this->part3.interval.start, this->part3.interval.size()) :
|
||||
check11(&text[this->part2.interval.start], this->part2.interval.size()) &&
|
||||
check11(&text[this->part3.interval.start], this->part3.interval.size()) :
|
||||
false;
|
||||
else if (this->model[0] == '0' && this->model[1] == '3')
|
||||
is_valid =
|
||||
this->part3.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) &&
|
||||
check11(text + this->part2.interval.start, this->part2.interval.size()) &&
|
||||
check11(text + this->part3.interval.start, this->part3.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) &&
|
||||
check11(&text[this->part2.interval.start], this->part2.interval.size()) &&
|
||||
check11(&text[this->part3.interval.start], this->part3.interval.size()) :
|
||||
false;
|
||||
else if (this->model[0] == '0' && this->model[1] == '4')
|
||||
is_valid =
|
||||
this->part3.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) &&
|
||||
check11(text + this->part3.interval.start, this->part3.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) &&
|
||||
check11(&text[this->part3.interval.start], this->part3.interval.size()) :
|
||||
false;
|
||||
else if ((this->model[0] == '0' || this->model[0] == '5') && this->model[1] == '5')
|
||||
is_valid =
|
||||
this->part3.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) :
|
||||
this->part2.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() <= 20 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) :
|
||||
this->part1.interval ?
|
||||
this->part1.interval.size() <= 12 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) :
|
||||
false;
|
||||
else if (this->model[0] == '0' && this->model[1] == '6')
|
||||
is_valid =
|
||||
@@ -5315,23 +5315,23 @@ namespace stdex
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(
|
||||
text + this->part2.interval.start, this->part2.interval.size(),
|
||||
text + this->part3.interval.start, this->part3.interval.size()) :
|
||||
&text[this->part2.interval.start], this->part2.interval.size(),
|
||||
&text[this->part3.interval.start], this->part3.interval.size()) :
|
||||
this->part2.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() <= 20 &&
|
||||
check11(text + this->part2.interval.start, this->part2.interval.size()) :
|
||||
check11(&text[this->part2.interval.start], this->part2.interval.size()) :
|
||||
false;
|
||||
else if (this->model[0] == '0' && this->model[1] == '7')
|
||||
is_valid =
|
||||
this->part3.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(text + this->part2.interval.start, this->part2.interval.size()) :
|
||||
check11(&text[this->part2.interval.start], this->part2.interval.size()) :
|
||||
this->part2.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() <= 20 &&
|
||||
check11(text + this->part2.interval.start, this->part2.interval.size()) :
|
||||
check11(&text[this->part2.interval.start], this->part2.interval.size()) :
|
||||
false;
|
||||
else if (this->model[0] == '0' && this->model[1] == '8')
|
||||
is_valid =
|
||||
@@ -5339,9 +5339,9 @@ namespace stdex
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(
|
||||
text + this->part1.interval.start, this->part1.interval.size(),
|
||||
text + this->part2.interval.start, this->part2.interval.size()) &&
|
||||
check11(text + this->part3.interval.start, this->part3.interval.size()) :
|
||||
&text[this->part1.interval.start], this->part1.interval.size(),
|
||||
&text[this->part2.interval.start], this->part2.interval.size()) &&
|
||||
check11(&text[this->part3.interval.start], this->part3.interval.size()) :
|
||||
false;
|
||||
else if (this->model[0] == '0' && this->model[1] == '9')
|
||||
is_valid =
|
||||
@@ -5349,32 +5349,32 @@ namespace stdex
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(
|
||||
text + this->part1.interval.start, this->part1.interval.size(),
|
||||
text + this->part2.interval.start, this->part2.interval.size()) :
|
||||
&text[this->part1.interval.start], this->part1.interval.size(),
|
||||
&text[this->part2.interval.start], this->part2.interval.size()) :
|
||||
this->part2.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() <= 20 &&
|
||||
check11(
|
||||
text + this->part1.interval.start, this->part1.interval.size(),
|
||||
text + this->part2.interval.start, this->part2.interval.size()) :
|
||||
&text[this->part1.interval.start], this->part1.interval.size(),
|
||||
&text[this->part2.interval.start], this->part2.interval.size()) :
|
||||
this->part1.interval ?
|
||||
this->part1.interval.size() <= 12 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) :
|
||||
false;
|
||||
else if (this->model[0] == '1' && this->model[1] == '0')
|
||||
is_valid =
|
||||
this->part3.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) &&
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) &&
|
||||
check11(
|
||||
text + this->part2.interval.start, this->part2.interval.size(),
|
||||
text + this->part3.interval.start, this->part3.interval.size()) :
|
||||
&text[this->part2.interval.start], this->part2.interval.size(),
|
||||
&text[this->part3.interval.start], this->part3.interval.size()) :
|
||||
this->part2.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() <= 20 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) &&
|
||||
check11(text + this->part2.interval.start, this->part2.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) &&
|
||||
check11(&text[this->part2.interval.start], this->part2.interval.size()) :
|
||||
false;
|
||||
else if (
|
||||
(this->model[0] == '1' && (this->model[1] == '1' || this->model[1] == '8' || this->model[1] == '9')) ||
|
||||
@@ -5385,13 +5385,13 @@ namespace stdex
|
||||
this->part3.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) &&
|
||||
check11(text + this->part2.interval.start, this->part2.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) &&
|
||||
check11(&text[this->part2.interval.start], this->part2.interval.size()) :
|
||||
this->part2.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() <= 20 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) &&
|
||||
check11(text + this->part2.interval.start, this->part2.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) &&
|
||||
check11(&text[this->part2.interval.start], this->part2.interval.size()) :
|
||||
false;
|
||||
else if (this->model[0] == '1' && this->model[1] == '2')
|
||||
is_valid =
|
||||
@@ -5399,7 +5399,7 @@ namespace stdex
|
||||
this->part2.interval ? false :
|
||||
this->part1.interval ?
|
||||
this->part1.interval.size() <= 13 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) :
|
||||
false;
|
||||
else if ((this->model[0] == '2' || this->model[0] == '3') && this->model[1] == '1')
|
||||
is_valid =
|
||||
@@ -5407,7 +5407,7 @@ namespace stdex
|
||||
this->part2.interval ?
|
||||
this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
|
||||
this->part1.interval.size() + this->part2.interval.size() <= 20 &&
|
||||
check11(text + this->part1.interval.start, this->part1.interval.size()) :
|
||||
check11(&text[this->part1.interval.start], this->part1.interval.size()) :
|
||||
false;
|
||||
else
|
||||
is_valid = true; // Assume models we don't handle as valid
|
||||
@@ -6314,7 +6314,7 @@ namespace stdex
|
||||
stdex_assert(text || start >= end);
|
||||
this->interval.end = start;
|
||||
|
||||
if (this->interval.end + 7 <= end && stdex::strnicmp(text + this->interval.end, 7, "http://", SIZE_MAX, m_locale) == 0) {
|
||||
if (this->interval.end + 7 <= end && stdex::strnicmp(&text[this->interval.end], 7, "http://", SIZE_MAX, m_locale) == 0) {
|
||||
this->interval.end += 7;
|
||||
if (server.match(text, this->interval.end, end, flags))
|
||||
this->interval.end = server.interval.end;
|
||||
@@ -6342,7 +6342,6 @@ namespace stdex
|
||||
goto error;
|
||||
|
||||
params.clear();
|
||||
|
||||
if (this->interval.end < end && text[this->interval.end] == '?') {
|
||||
this->interval.end++;
|
||||
for (;;) {
|
||||
@@ -6880,8 +6879,8 @@ namespace stdex
|
||||
if (stdex::isspace(text[this->interval.end])) {
|
||||
version_min.end = this->interval.end;
|
||||
version =
|
||||
(uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100 +
|
||||
(uint16_t)strtoui(text + version_min.start, version_min.size(), nullptr, 10);
|
||||
(uint16_t)strtoui(&text[version_maj.start], version_maj.size(), nullptr, 10) * 0x100 +
|
||||
(uint16_t)strtoui(&text[version_min.start], version_min.size(), nullptr, 10);
|
||||
break;
|
||||
}
|
||||
else
|
||||
@@ -6896,7 +6895,7 @@ namespace stdex
|
||||
version_maj.end = this->interval.end;
|
||||
version_min.start = 1;
|
||||
version_min.end = 0;
|
||||
version = (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100;
|
||||
version = (uint16_t)strtoui(&text[version_maj.start], version_maj.size(), nullptr, 10) * 0x100;
|
||||
break;
|
||||
}
|
||||
else
|
||||
@@ -7312,7 +7311,7 @@ namespace stdex
|
||||
}
|
||||
}
|
||||
if (m_chr->match(text, this->interval.end, end, flags)) {
|
||||
value.append(text + m_chr->interval.start, m_chr->interval.size());
|
||||
value.append(&text[m_chr->interval.start], m_chr->interval.size());
|
||||
this->interval.end = m_chr->interval.end;
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user