forked from boostorg/static_string
Fix potential overflows
This commit is contained in:
@ -5365,7 +5365,7 @@ replace(
|
|||||||
n1 = (std::min)(n1, curr_size - pos);
|
n1 = (std::min)(n1, curr_size - pos);
|
||||||
Traits::move(&curr_data[pos + n2], &curr_data[pos + n1], curr_size - pos - n1 + 1);
|
Traits::move(&curr_data[pos + n2], &curr_data[pos + n1], curr_size - pos - n1 + 1);
|
||||||
Traits::assign(&curr_data[pos], n2, c);
|
Traits::assign(&curr_data[pos], n2, c);
|
||||||
this->set_size((curr_size + n2) - n1);
|
this->set_size((curr_size - n1) + n2);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5415,7 +5415,7 @@ replace(
|
|||||||
// copy all before splice point
|
// copy all before splice point
|
||||||
Traits::move(&curr_data[pos], &curr_data[offset], diff);
|
Traits::move(&curr_data[pos], &curr_data[offset], diff);
|
||||||
// copy all after splice point
|
// copy all after splice point
|
||||||
Traits::move(&curr_data[pos + diff], &curr_data[offset + (n2 - n1) + diff], n2 - diff);
|
Traits::move(&curr_data[pos + diff], &curr_data[(offset - n1) + n2 + diff], n2 - diff);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5426,7 +5426,7 @@ replace(
|
|||||||
Traits::move(&curr_data[pos + n2], &curr_data[pos + n1], curr_size - pos - n1 + 1);
|
Traits::move(&curr_data[pos + n2], &curr_data[pos + n1], curr_size - pos - n1 + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this->set_size((curr_size + n2) - n1);
|
this->set_size((curr_size - n1) + n2);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5462,8 +5462,8 @@ replace(
|
|||||||
// Cap the size
|
// Cap the size
|
||||||
n1 = (std::min)(n1, curr_size - pos);
|
n1 = (std::min)(n1, curr_size - pos);
|
||||||
// Move everything from the end of the splice point to the end of the rotated string to the begining of the splice point
|
// Move everything from the end of the splice point to the end of the rotated string to the begining of the splice point
|
||||||
Traits::move(&curr_data[pos + n2], &curr_data[pos + n2 + n1], (curr_size + (n2 - n1)) - pos);
|
Traits::move(&curr_data[pos + n2], &curr_data[pos + n2 + n1], ((curr_size - n1) + n2) - pos);
|
||||||
this->set_size((curr_size + n2) - n1);
|
this->set_size((curr_size - n1) + n2);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5652,7 +5652,7 @@ replace_unchecked(
|
|||||||
n1 = curr_size - pos;
|
n1 = curr_size - pos;
|
||||||
Traits::move(&curr_data[pos + n2], &curr_data[pos + n1], curr_size - pos - n1 + 1);
|
Traits::move(&curr_data[pos + n2], &curr_data[pos + n1], curr_size - pos - n1 + 1);
|
||||||
Traits::copy(&curr_data[pos], s, n2);
|
Traits::copy(&curr_data[pos], s, n2);
|
||||||
this->set_size((curr_size + n2) - n1);
|
this->set_size((curr_size - n1) + n2);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user