From 2f16a8de39637e8b0e82dc91dd5f02df1f8a0fd6 Mon Sep 17 00:00:00 2001 From: "bzbarsky%mit.edu" Date: Tue, 24 May 2005 04:15:05 +0000 Subject: [PATCH] Fix leak in table background painting. Bug 295236, r=bernd, sr=dveditz, a=asa --- layout/tables/nsTablePainter.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/layout/tables/nsTablePainter.cpp b/layout/tables/nsTablePainter.cpp index 33124704db63..ee6128188e4a 100644 --- a/layout/tables/nsTablePainter.cpp +++ b/layout/tables/nsTablePainter.cpp @@ -406,6 +406,9 @@ TableBackgroundPainter::PaintTable(nsTableFrame* aTableFrame, } } + // Boolean that indicates whether mCols took ownership of cgData + PRBool cgDataOwnershipTaken = PR_FALSE; + /*Loop over columns in this colgroup*/ if (cgData->IsVisible()) { for (nsTableColFrame* col = cgFrame->GetFirstColumn(); col; @@ -420,6 +423,7 @@ TableBackgroundPainter::PaintTable(nsTableFrame* aTableFrame, mCols[colIndex].mCol.mRect.MoveBy(cgData->mRect.x, cgData->mRect.y); //link to parent colgroup's data mCols[colIndex].mColGroup = cgData; + cgDataOwnershipTaken = PR_TRUE; if (mIsBorderCollapse) { border.left = lastLeftBorder; lastLeftBorder = col->GetContinuousBCBorderWidth(mP2t, border); @@ -430,6 +434,11 @@ TableBackgroundPainter::PaintTable(nsTableFrame* aTableFrame, } } } + + if (!cgDataOwnershipTaken) { + cgData->Destroy(mPresContext); + delete cgData; + } } }