Changeset 134683 in webkit
- Timestamp:
- Nov 14, 2012 3:36:04 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r134678 r134683 1 2012-11-14 Tony Chang <tony@chromium.org> 2 3 Crash in flexbox when removing absolutely positioned children 4 https://bugs.webkit.org/show_bug.cgi?id=100465 5 6 Reviewed by Ojan Vafai. 7 8 Test case for the crash. 9 10 * css3/flexbox/crash-removing-out-of-flow-child-expected.txt: Added. 11 * css3/flexbox/crash-removing-out-of-flow-child.html: Added. 12 1 13 2012-11-14 Dirk Schulze <krit@webkit.org> 2 14 -
trunk/Source/WebCore/ChangeLog
r134680 r134683 1 2012-11-14 Tony Chang <tony@chromium.org> 2 3 Crash in flexbox when removing absolutely positioned children 4 https://bugs.webkit.org/show_bug.cgi?id=100465 5 6 Reviewed by Ojan Vafai. 7 8 We use m_numberOfChildrenOnFirstLine when computing baseline alignment. 9 This value gets set during flexbox layout. When we remove an absolutely 10 positioned child, we don't relayout and this value would get stale. 11 12 Change m_numberOfChildrenOnFirstLine to m_numberOfInFlowChildrenOnFirstLine 13 so the value doesn't get stale when we remove absolutely positioned children. 14 Also change the loop in firstLineBoxBaseline to bail if we run off the end of 15 the iterator. 16 17 Test: css3/flexbox/crash-removing-out-of-flow-child.html 18 19 * rendering/RenderFlexibleBox.cpp: 20 (WebCore::RenderFlexibleBox::RenderFlexibleBox): 21 (WebCore::RenderFlexibleBox::firstLineBoxBaseline): 22 (WebCore::RenderFlexibleBox::layoutBlock): 23 (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems): 24 (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): 25 * rendering/RenderFlexibleBox.h: 26 1 27 2012-11-14 Joshua Bell <jsbell@chromium.org> 2 28 -
trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp
r133906 r134683 133 133 RenderFlexibleBox::RenderFlexibleBox(Node* node) 134 134 : RenderBlock(node) 135 , m_numberOf ChildrenOnFirstLine(0)135 , m_numberOfInFlowChildrenOnFirstLine(-1) 136 136 { 137 137 setChildrenInline(false); // All of our children must be block-level. … … 255 255 ASSERT(m_orderIterator); 256 256 257 if (isWritingModeRoot() || !m_numberOfChildrenOnFirstLine)257 if (isWritingModeRoot() || m_numberOfInFlowChildrenOnFirstLine <= 0) 258 258 return -1; 259 259 RenderBox* baselineChild = 0; 260 RenderBox* child = m_orderIterator->first();261 for ( size_t childNumber = 0; childNumber < m_numberOfChildrenOnFirstLine; ++childNumber,child = m_orderIterator->next()) {260 int childNumber = 0; 261 for (RenderBox* child = m_orderIterator->first(); child; child = m_orderIterator->next()) { 262 262 if (child->isOutOfFlowPositioned()) 263 263 continue; … … 268 268 if (!baselineChild) 269 269 baselineChild = child; 270 271 ++childNumber; 272 if (childNumber == m_numberOfInFlowChildrenOnFirstLine) 273 break; 270 274 } 271 275 … … 321 325 updateLogicalWidth(); 322 326 327 m_numberOfInFlowChildrenOnFirstLine = -1; 323 328 m_overflow.clear(); 324 329 … … 386 391 flipForWrapReverse(iterator, lineContexts, crossAxisStartEdge); 387 392 } 388 389 m_numberOfChildrenOnFirstLine = lineContexts.isEmpty() ? 0 : lineContexts[0].numberOfChildren;390 393 391 394 // direction:rtl + flex-direction:column means the cross-axis direction is flipped. … … 1133 1136 } 1134 1137 1138 if (m_numberOfInFlowChildrenOnFirstLine == -1) 1139 m_numberOfInFlowChildrenOnFirstLine = seenInFlowPositionedChildren; 1135 1140 lineContexts.append(LineContext(crossAxisOffset, maxChildCrossAxisExtent, children.size(), maxAscent)); 1136 1141 crossAxisOffset += maxChildCrossAxisExtent; -
trunk/Source/WebCore/rendering/RenderFlexibleBox.h
r132112 r134683 147 147 148 148 OwnPtr<OrderIterator> m_orderIterator; 149 size_t m_numberOfChildrenOnFirstLine;149 int m_numberOfInFlowChildrenOnFirstLine; 150 150 }; 151 151
Note: See TracChangeset
for help on using the changeset viewer.