From 24657db6290c7bbd3829cc38ff3321a725218dc1 Mon Sep 17 00:00:00 2001 From: Moonchild Date: Fri, 23 Oct 2020 10:36:09 +0000 Subject: [layout] Avoid negative availSize.BSizes in paginated table reflow. --- layout/tables/nsTableFrame.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'layout/tables/nsTableFrame.cpp') diff --git a/layout/tables/nsTableFrame.cpp b/layout/tables/nsTableFrame.cpp index 59a6d0f1a..6d3527307 100644 --- a/layout/tables/nsTableFrame.cpp +++ b/layout/tables/nsTableFrame.cpp @@ -104,6 +104,14 @@ struct TableReflowInput { availSize.BSize(wm) = std::max(0, availSize.BSize(wm)); } } + + void ReduceAvailableBSizeBy(WritingMode aWM, nscoord aAmount) { + if (availSize.BSize(aWM) == NS_UNCONSTRAINEDSIZE) { + return; + } + availSize.BSize(aWM) -= aAmount; + availSize.BSize(aWM) = std::max(0, availSize.BSize(aWM)); + } }; } // namespace mozilla @@ -2682,9 +2690,7 @@ nsTableFrame::PlaceChild(TableReflowInput& aReflowInput, aReflowInput.bCoord += aKidDesiredSize.BSize(wm); // If our bsize is constrained, then update the available bsize - if (NS_UNCONSTRAINEDSIZE != aReflowInput.availSize.BSize(wm)) { - aReflowInput.availSize.BSize(wm) -= aKidDesiredSize.BSize(wm); - } + aReflowInput.ReduceAvailableBSizeBy(wm, aKidDesiredSize.BSize(wm)); } void @@ -3004,9 +3010,7 @@ nsTableFrame::ReflowChildren(TableReflowInput& aReflowInput, kidReflowInput.mFlags.mIsTopOfPage = false; } aReflowInput.bCoord += cellSpacingB; - if (NS_UNCONSTRAINEDSIZE != aReflowInput.availSize.BSize(wm)) { - aReflowInput.availSize.BSize(wm) -= cellSpacingB; - } + aReflowInput.ReduceAvailableBSizeBy(wm, cellSpacingB); // record the presence of a next in flow, it might get destroyed so we // need to reorder the row group array bool reorder = false; @@ -3171,9 +3175,7 @@ nsTableFrame::ReflowChildren(TableReflowInput& aReflowInput, aReflowInput.bCoord += kidRect.BSize(wm); // If our bsize is constrained then update the available bsize. - if (NS_UNCONSTRAINEDSIZE != aReflowInput.availSize.BSize(wm)) { - aReflowInput.availSize.BSize(wm) -= cellSpacingB + kidRect.BSize(wm); - } + aReflowInput.ReduceAvailableBSizeBy(wm, cellSpacingB + kidRect.BSize(wm)); } } -- cgit v1.2.3