Bug 1330759 part 5. Back out the nsTSubstring changes we made in bug 1324430, because they can lead to non-null-terminated nsStrings. r=froydnj

This commit is contained in:
Boris Zbarsky
2017-01-18 22:20:15 -05:00
parent bb26bc9e17
commit 12f7fd3391
2 changed files with 5 additions and 38 deletions

View File

@@ -417,28 +417,13 @@ nsTSubstring_CharT::AssignLiteral(const char_type* aData, size_type aLength)
void
nsTSubstring_CharT::Assign(const self_type& aStr)
{
if (!Assign(aStr, aStr.Length(), mozilla::fallible)) {
if (!Assign(aStr, mozilla::fallible)) {
AllocFailed(aStr.Length());
}
}
bool
nsTSubstring_CharT::Assign(const self_type& aStr, const fallible_t& aFallible)
{
return Assign(aStr, aStr.Length(), aFallible);
}
void
nsTSubstring_CharT::Assign(const self_type& aStr, size_type aLength)
{
if (!Assign(aStr, aLength, mozilla::fallible)) {
AllocFailed(aLength);
}
}
bool
nsTSubstring_CharT::Assign(const self_type& aStr, size_type aLength,
const fallible_t& aFallible)
{
// |aStr| could be sharable. We need to check its flags to know how to
// deal with it.
@@ -447,11 +432,7 @@ nsTSubstring_CharT::Assign(const self_type& aStr, size_type aLength,
return true;
}
if (aStr.Length() < aLength) {
aLength = aStr.Length();
}
if (!aLength) {
if (!aStr.mLength) {
Truncate();
mFlags |= aStr.mFlags & F_VOIDED;
return true;
@@ -466,7 +447,7 @@ nsTSubstring_CharT::Assign(const self_type& aStr, size_type aLength,
::ReleaseData(mData, mFlags);
mData = aStr.mData;
mLength = aLength;
mLength = aStr.mLength;
SetDataFlags(F_TERMINATED | F_SHARED);
// get an owning reference to the mData
@@ -475,12 +456,12 @@ nsTSubstring_CharT::Assign(const self_type& aStr, size_type aLength,
} else if (aStr.mFlags & F_LITERAL) {
MOZ_ASSERT(aStr.mFlags & F_TERMINATED, "Unterminated literal");
AssignLiteral(aStr.mData, aLength);
AssignLiteral(aStr.mData, aStr.mLength);
return true;
}
// else, treat this like an ordinary assignment.
return Assign(aStr.Data(), aLength, aFallible);
return Assign(aStr.Data(), aStr.Length(), aFallible);
}
void