Bug 1097283: Fix count/byte mismatches in NS_ABORT_OOM calls. r=froydnj

This commit is contained in:
David Major
2014-11-12 21:13:44 +13:00
parent b3f8716d59
commit d85f8b5439
7 changed files with 40 additions and 26 deletions

View File

@@ -126,7 +126,7 @@ public:
*/ */
void AppendTo(nsAString& aString) const { void AppendTo(nsAString& aString) const {
if (!AppendTo(aString, mozilla::fallible_t())) { if (!AppendTo(aString, mozilla::fallible_t())) {
NS_ABORT_OOM(GetLength()); aString.AllocFailed(aString.Length() + GetLength());
} }
} }
@@ -156,7 +156,7 @@ public:
*/ */
void AppendTo(nsAString& aString, int32_t aOffset, int32_t aLength) const { void AppendTo(nsAString& aString, int32_t aOffset, int32_t aLength) const {
if (!AppendTo(aString, aOffset, aLength, mozilla::fallible_t())) { if (!AppendTo(aString, aOffset, aLength, mozilla::fallible_t())) {
NS_ABORT_OOM(aLength); aString.AllocFailed(aString.Length() + aLength);
} }
} }

View File

@@ -85,7 +85,7 @@ public:
void Push(void* aItem) void Push(void* aItem)
{ {
if (!Push(aItem, fallible_t())) { if (!Push(aItem, fallible_t())) {
NS_ABORT_OOM(mSize); NS_ABORT_OOM(mSize * sizeof(void*));
} }
} }
@@ -99,7 +99,7 @@ public:
void PushFront(void* aItem) void PushFront(void* aItem)
{ {
if (!PushFront(aItem, fallible_t())) { if (!PushFront(aItem, fallible_t())) {
NS_ABORT_OOM(mSize); NS_ABORT_OOM(mSize * sizeof(void*));
} }
} }

View File

@@ -95,7 +95,7 @@ void
AppendASCIItoUTF16(const nsACString& aSource, nsAString& aDest) AppendASCIItoUTF16(const nsACString& aSource, nsAString& aDest)
{ {
if (!AppendASCIItoUTF16(aSource, aDest, mozilla::fallible_t())) { if (!AppendASCIItoUTF16(aSource, aDest, mozilla::fallible_t())) {
NS_ABORT_OOM(aDest.Length() + aSource.Length()); aDest.AllocFailed(aDest.Length() + aSource.Length());
} }
} }
@@ -144,7 +144,7 @@ void
AppendUTF16toUTF8(const nsAString& aSource, nsACString& aDest) AppendUTF16toUTF8(const nsAString& aSource, nsACString& aDest)
{ {
if (!AppendUTF16toUTF8(aSource, aDest, mozilla::fallible_t())) { if (!AppendUTF16toUTF8(aSource, aDest, mozilla::fallible_t())) {
NS_ABORT_OOM(aDest.Length() + aSource.Length()); aDest.AllocFailed(aDest.Length() + aSource.Length());
} }
} }
@@ -185,7 +185,7 @@ void
AppendUTF8toUTF16(const nsACString& aSource, nsAString& aDest) AppendUTF8toUTF16(const nsACString& aSource, nsAString& aDest)
{ {
if (!AppendUTF8toUTF16(aSource, aDest, mozilla::fallible_t())) { if (!AppendUTF8toUTF16(aSource, aDest, mozilla::fallible_t())) {
NS_ABORT_OOM(aDest.Length() + aSource.Length()); aDest.AllocFailed(aDest.Length() + aSource.Length());
} }
} }

View File

@@ -919,7 +919,7 @@ void
nsString::ReplaceChar( const char16_t* aSet, char16_t aNewChar ) nsString::ReplaceChar( const char16_t* aSet, char16_t aNewChar )
{ {
if (!EnsureMutable()) // XXX do this lazily? if (!EnsureMutable()) // XXX do this lazily?
NS_ABORT_OOM(mLength); AllocFailed(mLength);
char16_t* data = mData; char16_t* data = mData;
uint32_t lenRemaining = mLength; uint32_t lenRemaining = mLength;

View File

@@ -386,7 +386,7 @@ nsTString_CharT::SetCharAt( char16_t aChar, uint32_t aIndex )
return false; return false;
if (!EnsureMutable()) if (!EnsureMutable())
NS_ABORT_OOM(mLength); AllocFailed(mLength);
mData[aIndex] = CharT(aChar); mData[aIndex] = CharT(aChar);
return true; return true;
@@ -401,7 +401,7 @@ void
nsTString_CharT::StripChars( const char* aSet ) nsTString_CharT::StripChars( const char* aSet )
{ {
if (!EnsureMutable()) if (!EnsureMutable())
NS_ABORT_OOM(mLength); AllocFailed(mLength);
mLength = nsBufferRoutines<CharT>::strip_chars(mData, mLength, aSet); mLength = nsBufferRoutines<CharT>::strip_chars(mData, mLength, aSet);
} }
@@ -421,7 +421,7 @@ void
nsTString_CharT::ReplaceChar( char_type aOldChar, char_type aNewChar ) nsTString_CharT::ReplaceChar( char_type aOldChar, char_type aNewChar )
{ {
if (!EnsureMutable()) // XXX do this lazily? if (!EnsureMutable()) // XXX do this lazily?
NS_ABORT_OOM(mLength); AllocFailed(mLength);
for (uint32_t i=0; i<mLength; ++i) for (uint32_t i=0; i<mLength; ++i)
{ {
@@ -434,7 +434,7 @@ void
nsTString_CharT::ReplaceChar( const char* aSet, char_type aNewChar ) nsTString_CharT::ReplaceChar( const char* aSet, char_type aNewChar )
{ {
if (!EnsureMutable()) // XXX do this lazily? if (!EnsureMutable()) // XXX do this lazily?
NS_ABORT_OOM(mLength); AllocFailed(mLength);
char_type* data = mData; char_type* data = mData;
uint32_t lenRemaining = mLength; uint32_t lenRemaining = mLength;

View File

@@ -263,7 +263,7 @@ void
nsTSubstring_CharT::Assign(char_type aChar) nsTSubstring_CharT::Assign(char_type aChar)
{ {
if (!ReplacePrep(0, mLength, 1)) { if (!ReplacePrep(0, mLength, 1)) {
NS_ABORT_OOM(mLength); AllocFailed(mLength);
} }
*mData = aChar; *mData = aChar;
@@ -284,7 +284,7 @@ void
nsTSubstring_CharT::Assign(const char_type* aData) nsTSubstring_CharT::Assign(const char_type* aData)
{ {
if (!Assign(aData, size_type(-1), fallible_t())) { if (!Assign(aData, size_type(-1), fallible_t())) {
NS_ABORT_OOM(char_traits::length(aData)); AllocFailed(char_traits::length(aData));
} }
} }
@@ -292,7 +292,7 @@ void
nsTSubstring_CharT::Assign(const char_type* aData, size_type aLength) nsTSubstring_CharT::Assign(const char_type* aData, size_type aLength)
{ {
if (!Assign(aData, aLength, fallible_t())) { if (!Assign(aData, aLength, fallible_t())) {
NS_ABORT_OOM(aLength == size_type(-1) ? char_traits::length(aData) AllocFailed(aLength == size_type(-1) ? char_traits::length(aData)
: aLength); : aLength);
} }
} }
@@ -326,7 +326,7 @@ void
nsTSubstring_CharT::AssignASCII(const char* aData, size_type aLength) nsTSubstring_CharT::AssignASCII(const char* aData, size_type aLength)
{ {
if (!AssignASCII(aData, aLength, fallible_t())) { if (!AssignASCII(aData, aLength, fallible_t())) {
NS_ABORT_OOM(aLength); AllocFailed(aLength);
} }
} }
@@ -363,7 +363,7 @@ void
nsTSubstring_CharT::Assign(const self_type& aStr) nsTSubstring_CharT::Assign(const self_type& aStr)
{ {
if (!Assign(aStr, fallible_t())) { if (!Assign(aStr, fallible_t())) {
NS_ABORT_OOM(aStr.Length()); AllocFailed(aStr.Length());
} }
} }
@@ -413,7 +413,7 @@ void
nsTSubstring_CharT::Assign(const substring_tuple_type& aTuple) nsTSubstring_CharT::Assign(const substring_tuple_type& aTuple)
{ {
if (!Assign(aTuple, fallible_t())) { if (!Assign(aTuple, fallible_t())) {
NS_ABORT_OOM(aTuple.Length()); AllocFailed(aTuple.Length());
} }
} }
@@ -505,7 +505,7 @@ nsTSubstring_CharT::Replace(index_type aCutStart, size_type aCutLength,
{ {
if (!Replace(aCutStart, aCutLength, aData, aLength, if (!Replace(aCutStart, aCutLength, aData, aLength,
mozilla::fallible_t())) { mozilla::fallible_t())) {
NS_ABORT_OOM(Length() - aCutLength + 1); AllocFailed(Length() - aCutLength + 1);
} }
} }
@@ -603,7 +603,7 @@ void
nsTSubstring_CharT::SetCapacity(size_type aCapacity) nsTSubstring_CharT::SetCapacity(size_type aCapacity)
{ {
if (!SetCapacity(aCapacity, fallible_t())) { if (!SetCapacity(aCapacity, fallible_t())) {
NS_ABORT_OOM(aCapacity); AllocFailed(aCapacity);
} }
} }
@@ -784,7 +784,7 @@ nsTSubstring_CharT::StripChar(char_type aChar, int32_t aOffset)
} }
if (!EnsureMutable()) { // XXX do this lazily? if (!EnsureMutable()) { // XXX do this lazily?
NS_ABORT_OOM(mLength); AllocFailed(mLength);
} }
// XXX(darin): this code should defer writing until necessary. // XXX(darin): this code should defer writing until necessary.
@@ -811,7 +811,7 @@ nsTSubstring_CharT::StripChars(const char_type* aChars, uint32_t aOffset)
} }
if (!EnsureMutable()) { // XXX do this lazily? if (!EnsureMutable()) { // XXX do this lazily?
NS_ABORT_OOM(mLength); AllocFailed(mLength);
} }
// XXX(darin): this code should defer writing until necessary. // XXX(darin): this code should defer writing until necessary.

View File

@@ -146,7 +146,7 @@ public:
char_iterator BeginWriting() char_iterator BeginWriting()
{ {
if (!EnsureMutable()) { if (!EnsureMutable()) {
NS_ABORT_OOM(mLength); AllocFailed(mLength);
} }
return mData; return mData;
@@ -160,7 +160,7 @@ public:
char_iterator EndWriting() char_iterator EndWriting()
{ {
if (!EnsureMutable()) { if (!EnsureMutable()) {
NS_ABORT_OOM(mLength); AllocFailed(mLength);
} }
return mData + mLength; return mData + mLength;
@@ -742,7 +742,7 @@ public:
size_type GetMutableData(char_type** aData, size_type aNewLen = size_type(-1)) size_type GetMutableData(char_type** aData, size_type aNewLen = size_type(-1))
{ {
if (!EnsureMutable(aNewLen)) { if (!EnsureMutable(aNewLen)) {
NS_ABORT_OOM(aNewLen == size_type(-1) ? mLength : aNewLen); AllocFailed(aNewLen == size_type(-1) ? mLength : aNewLen);
} }
*aData = mData; *aData = mData;
@@ -869,6 +869,20 @@ public:
size_t SizeOfIncludingThisEvenIfShared(mozilla::MallocSizeOf aMallocSizeOf) size_t SizeOfIncludingThisEvenIfShared(mozilla::MallocSizeOf aMallocSizeOf)
const; const;
template<class T>
void NS_ABORT_OOM(T)
{
struct never {};
static_assert(mozilla::IsSame<T, never>::value,
"In string classes, use AllocFailed to account for sizeof(char_type). "
"Use the global ::NS_ABORT_OOM if you really have a count of bytes.");
}
MOZ_ALWAYS_INLINE void AllocFailed(size_t aLength)
{
::NS_ABORT_OOM(aLength * sizeof(char_type));
}
protected: protected:
friend class nsTObsoleteAStringThunk_CharT; friend class nsTObsoleteAStringThunk_CharT;