From 767024fce098b83e7d2cf01ef216715831c9499f Mon Sep 17 00:00:00 2001 From: "buster%netscape.com" Date: Thu, 19 Oct 2000 05:21:26 +0000 Subject: [PATCH] bug 57039 crash in [@ nsBlockBandData::GetBandData()] r=karnaze a=rickg, a=waterson some simple bullet-proofing for possible null pointer dereferencing git-svn-id: svn://10.0.0.236/trunk@81433 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/generic/nsBlockBandData.cpp | 8 +++++++- mozilla/layout/html/base/src/nsBlockBandData.cpp | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/mozilla/layout/generic/nsBlockBandData.cpp b/mozilla/layout/generic/nsBlockBandData.cpp index 98ebdb7aebe..97fcfe9a55a 100644 --- a/mozilla/layout/generic/nsBlockBandData.cpp +++ b/mozilla/layout/generic/nsBlockBandData.cpp @@ -98,6 +98,10 @@ nsBlockBandData::GetAvailableSpace(nscoord aY, nsRect& aResult) nsresult nsBlockBandData::GetBandData(nscoord aY) { + NS_ASSERTION(mSpaceManager, "bad state, no space manager"); + if (!mSpaceManager) { + return NS_ERROR_FAILURE; + } PRInt32 iterations =0; nsresult rv = mSpaceManager->GetBandData(aY, mSpace, *this); while (NS_FAILED(rv)) { @@ -108,7 +112,8 @@ nsBlockBandData::GetBandData(nscoord aY) return NS_ERROR_FAILURE; } // We need more space for our bands - if (mTrapezoids != mData) { + NS_ASSERTION(mTrapezoids, "bad state, no mTrapezoids"); + if (mTrapezoids && (mTrapezoids != mData)) { delete [] mTrapezoids; } PRInt32 newSize = mSize * 2; @@ -116,6 +121,7 @@ nsBlockBandData::GetBandData(nscoord aY) newSize = mCount; } mTrapezoids = new nsBandTrapezoid[newSize]; + NS_POSTCONDITION(mTrapezoids, "failure allocating mTrapezoids"); if (!mTrapezoids) { return NS_ERROR_OUT_OF_MEMORY; } diff --git a/mozilla/layout/html/base/src/nsBlockBandData.cpp b/mozilla/layout/html/base/src/nsBlockBandData.cpp index 98ebdb7aebe..97fcfe9a55a 100644 --- a/mozilla/layout/html/base/src/nsBlockBandData.cpp +++ b/mozilla/layout/html/base/src/nsBlockBandData.cpp @@ -98,6 +98,10 @@ nsBlockBandData::GetAvailableSpace(nscoord aY, nsRect& aResult) nsresult nsBlockBandData::GetBandData(nscoord aY) { + NS_ASSERTION(mSpaceManager, "bad state, no space manager"); + if (!mSpaceManager) { + return NS_ERROR_FAILURE; + } PRInt32 iterations =0; nsresult rv = mSpaceManager->GetBandData(aY, mSpace, *this); while (NS_FAILED(rv)) { @@ -108,7 +112,8 @@ nsBlockBandData::GetBandData(nscoord aY) return NS_ERROR_FAILURE; } // We need more space for our bands - if (mTrapezoids != mData) { + NS_ASSERTION(mTrapezoids, "bad state, no mTrapezoids"); + if (mTrapezoids && (mTrapezoids != mData)) { delete [] mTrapezoids; } PRInt32 newSize = mSize * 2; @@ -116,6 +121,7 @@ nsBlockBandData::GetBandData(nscoord aY) newSize = mCount; } mTrapezoids = new nsBandTrapezoid[newSize]; + NS_POSTCONDITION(mTrapezoids, "failure allocating mTrapezoids"); if (!mTrapezoids) { return NS_ERROR_OUT_OF_MEMORY; }