Bug 135601 - ASSERTION FAILED: !m_regionsInvalidated in WebCore::RenderFlowThread::regionAtBlockOffset
Summary: ASSERTION FAILED: !m_regionsInvalidated in WebCore::RenderFlowThread::regionA...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Layout and Rendering (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: zalan
URL:
Keywords: InRadar
Depends on:
Blocks: 116980
  Show dependency treegraph
 
Reported: 2014-08-05 02:41 PDT by Renata Hodovan
Modified: 2016-12-08 10:20 PST (History)
10 users (show)

See Also:


Attachments
Test case (93 bytes, text/html)
2014-08-05 02:41 PDT, Renata Hodovan
no flags Details
Patch (6.22 KB, patch)
2016-12-07 21:13 PST, zalan
no flags Details | Formatted Diff | Diff
Patch (6.23 KB, patch)
2016-12-07 21:15 PST, zalan
no flags Details | Formatted Diff | Diff
Patch (6.20 KB, patch)
2016-12-08 07:41 PST, zalan
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Renata Hodovan 2014-08-05 02:41:48 PDT
Created attachment 236022 [details]
Test case

The failing test case:

<style>
*  {
    display:table;
    -webkit-columns:2;
}
</style>
<textarea placeholder="a">


Backtrace:

ASSERTION FAILED: !m_regionsInvalidated
../../Source/WebCore/rendering/RenderFlowThread.cpp(396) : virtual WebCore::RenderRegion* WebCore::RenderFlowThread::regionAtBlockOffset(const WebCore::RenderBox*, WebCore::LayoutUnit, bool, WebCore::RenderFlowThread::RegionAutoGenerationPolicy)

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff97334700 (LWP 24858)]
0x00007ffff30191c8 in WTFCrash () at ../../Source/WTF/wtf/Assertions.cpp:329
329	    *(int *)(uintptr_t)0xbbadbeef = 0;
#0  0x00007ffff30191c8 in WTFCrash () at ../../Source/WTF/wtf/Assertions.cpp:329
#1  0x00007ffff3e07b1a in WebCore::RenderFlowThread::regionAtBlockOffset (this=0x79b760, clampBox=0x7a5c30, offset=..., extendLastRegion=false, autoGenerationPolicy=WebCore::RenderFlowThread::AllowRegionAutoGeneration) at ../../Source/WebCore/rendering/RenderFlowThread.cpp:396
#2  0x00007ffff3ea6c15 in WebCore::RenderMultiColumnFlowThread::regionAtBlockOffset (this=0x79b760, box=0x7a5c30, offset=..., extendLastRegion=false, autoGenerationPolicy=WebCore::RenderFlowThread::AllowRegionAutoGeneration) at ../../Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp:520
#3  0x00007ffff3ea6ba4 in WebCore::RenderMultiColumnFlowThread::updateMinimumPageHeight (this=0x79b760, block=0x7a5c30, offset=..., minHeight=...) at ../../Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp:513
#4  0x00007ffff3d807fa in WebCore::RenderBlockFlow::updateMinimumPageHeight (this=0x7a5c30, offset=..., minHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:1814
#5  0x00007ffff3d7f936 in WebCore::RenderBlockFlow::adjustLinePositionForPagination (this=0x7a5c30, lineBox=0x7a7d80, delta=..., overflowsRegion=@0x7fffffff9ffc: false, flowThread=0x79b760) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:1649
#6  0x00007ffff3d9559a in WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange (this=0x7a5c30, layoutState=..., resolver=..., cleanLineStart=..., cleanLineBidiStatus=..., consecutiveHyphenatedLines=0) at ../../Source/WebCore/rendering/RenderBlockLineLayout.cpp:1138
#7  0x00007ffff3d94b58 in WebCore::RenderBlockFlow::layoutRunsAndFloats (this=0x7a5c30, layoutState=..., hasInlineChild=true) at ../../Source/WebCore/rendering/RenderBlockLineLayout.cpp:1025
#8  0x00007ffff3d97223 in WebCore::RenderBlockFlow::layoutLineBoxes (this=0x7a5c30, relayoutChildren=true, repaintLogicalTop=..., repaintLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockLineLayout.cpp:1442
#9  0x00007ffff3d7b54e in WebCore::RenderBlockFlow::layoutInlineChildren (this=0x7a5c30, relayoutChildren=true, repaintLogicalTop=..., repaintLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:652
#10 0x00007ffff3d7a934 in WebCore::RenderBlockFlow::layoutBlock (this=0x7a5c30, relayoutChildren=true, pageLogicalHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:483
#11 0x00007ffff3d50987 in WebCore::RenderBlock::layout (this=0x7a5c30) at ../../Source/WebCore/rendering/RenderBlock.cpp:1018
#12 0x00007ffff3d1ddd7 in WebCore::RenderElement::layoutIfNeeded (this=0x7a5c30) at ../../Source/WebCore/rendering/RenderElement.h:102
#13 0x00007ffff3f1754a in WebCore::RenderTextControlMultiLine::layoutSpecialExcludedChild (this=0x9974f0, relayoutChildren=true) at ../../Source/WebCore/rendering/RenderTextControlMultiLine.cpp:115
#14 0x00007ffff3d7b338 in WebCore::RenderBlockFlow::layoutBlockChildren (this=0x9974f0, relayoutChildren=true, maxFloatLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:604
#15 0x00007ffff3d7a958 in WebCore::RenderBlockFlow::layoutBlock (this=0x9974f0, relayoutChildren=true, pageLogicalHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:485
#16 0x00007ffff3d50987 in WebCore::RenderBlock::layout (this=0x9974f0) at ../../Source/WebCore/rendering/RenderBlock.cpp:1018
#17 0x00007ffff3d7b918 in WebCore::RenderBlockFlow::layoutBlockChild (this=0x787de0, child=..., marginInfo=..., previousFloatLogicalBottom=..., maxFloatLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:713
#18 0x00007ffff3d7b45a in WebCore::RenderBlockFlow::layoutBlockChildren (this=0x787de0, relayoutChildren=true, maxFloatLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:632
#19 0x00007ffff3d7a958 in WebCore::RenderBlockFlow::layoutBlock (this=0x787de0, relayoutChildren=true, pageLogicalHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:485
#20 0x00007ffff3ef1947 in WebCore::RenderTableCell::layout (this=0x787de0) at ../../Source/WebCore/rendering/RenderTableCell.cpp:258
#21 0x00007ffff3ef949f in WebCore::RenderTableRow::layout (this=0x77e710) at ../../Source/WebCore/rendering/RenderTableRow.cpp:176
#22 0x00007ffff3d1ddd7 in WebCore::RenderElement::layoutIfNeeded (this=0x77e710) at ../../Source/WebCore/rendering/RenderElement.h:102
#23 0x00007ffff3efb760 in WebCore::RenderTableSection::layout (this=0x9db3c0) at ../../Source/WebCore/rendering/RenderTableSection.cpp:420
#24 0x00007ffff3d1ddd7 in WebCore::RenderElement::layoutIfNeeded (this=0x9db3c0) at ../../Source/WebCore/rendering/RenderElement.h:102
#25 0x00007ffff3ee5f72 in WebCore::RenderTable::layout (this=0x9acef0) at ../../Source/WebCore/rendering/RenderTable.cpp:466
#26 0x00007ffff3d7b918 in WebCore::RenderBlockFlow::layoutBlockChild (this=0x79ba90, child=..., marginInfo=..., previousFloatLogicalBottom=..., maxFloatLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:713
#27 0x00007ffff3d7b45a in WebCore::RenderBlockFlow::layoutBlockChildren (this=0x79ba90, relayoutChildren=true, maxFloatLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:632
#28 0x00007ffff3d7a958 in WebCore::RenderBlockFlow::layoutBlock (this=0x79ba90, relayoutChildren=true, pageLogicalHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:485
#29 0x00007ffff3ef1947 in WebCore::RenderTableCell::layout (this=0x79ba90) at ../../Source/WebCore/rendering/RenderTableCell.cpp:258
#30 0x00007ffff3ef949f in WebCore::RenderTableRow::layout (this=0x8c0db0) at ../../Source/WebCore/rendering/RenderTableRow.cpp:176
#31 0x00007ffff3d1ddd7 in WebCore::RenderElement::layoutIfNeeded (this=0x8c0db0) at ../../Source/WebCore/rendering/RenderElement.h:102
#32 0x00007ffff3efb760 in WebCore::RenderTableSection::layout (this=0x79b590) at ../../Source/WebCore/rendering/RenderTableSection.cpp:420
#33 0x00007ffff3d1ddd7 in WebCore::RenderElement::layoutIfNeeded (this=0x79b590) at ../../Source/WebCore/rendering/RenderElement.h:102
#34 0x00007ffff3ee5f72 in WebCore::RenderTable::layout (this=0x8e6d00) at ../../Source/WebCore/rendering/RenderTable.cpp:466
#35 0x00007ffff3d7b918 in WebCore::RenderBlockFlow::layoutBlockChild (this=0x87b280, child=..., marginInfo=..., previousFloatLogicalBottom=..., maxFloatLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:713
#36 0x00007ffff3d7b45a in WebCore::RenderBlockFlow::layoutBlockChildren (this=0x87b280, relayoutChildren=true, maxFloatLogicalBottom=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:632
#37 0x00007ffff3d7a958 in WebCore::RenderBlockFlow::layoutBlock (this=0x87b280, relayoutChildren=true, pageLogicalHeight=...) at ../../Source/WebCore/rendering/RenderBlockFlow.cpp:485
#38 0x00007ffff3d50987 in WebCore::RenderBlock::layout (this=0x87b280) at ../../Source/WebCore/rendering/RenderBlock.cpp:1018
#39 0x00007ffff3f28aad in WebCore::RenderView::layoutContent (this=0x87b280, state=...) at ../../Source/WebCore/rendering/RenderView.cpp:232
#40 0x00007ffff3f29166 in WebCore::RenderView::layout (this=0x87b280) at ../../Source/WebCore/rendering/RenderView.cpp:357
#41 0x00007ffff3acf1f4 in WebCore::FrameView::layout (this=0xa0e750, allowSubtree=true) at ../../Source/WebCore/page/FrameView.cpp:1282
#42 0x00007ffff353f72f in WebCore::Document::implicitClose (this=0xa0f4f0) at ../../Source/WebCore/dom/Document.cpp:2438
#43 0x00007ffff399e745 in WebCore::FrameLoader::checkCallImplicitClose (this=0x8ae008) at ../../Source/WebCore/loader/FrameLoader.cpp:898
#44 0x00007ffff399e4f0 in WebCore::FrameLoader::checkCompleted (this=0x8ae008) at ../../Source/WebCore/loader/FrameLoader.cpp:844
#45 0x00007ffff399e278 in WebCore::FrameLoader::finishedParsing (this=0x8ae008) at ../../Source/WebCore/loader/FrameLoader.cpp:764
#46 0x00007ffff35470db in WebCore::Document::finishedParsing (this=0xa0f4f0) at ../../Source/WebCore/dom/Document.cpp:4519
#47 0x00007ffff383a805 in WebCore::HTMLConstructionSite::finishedParsing (this=0xa19de8) at ../../Source/WebCore/html/parser/HTMLConstructionSite.cpp:395
#48 0x00007ffff3874c57 in WebCore::HTMLTreeBuilder::finished (this=0xa19dd0) at ../../Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2997
#49 0x00007ffff38423a0 in WebCore::HTMLDocumentParser::end (this=0x808b50) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:451
#50 0x00007ffff384248b in WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd (this=0x808b50) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:462
#51 0x00007ffff3840ff9 in WebCore::HTMLDocumentParser::prepareToStopParsing (this=0x808b50) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:165
#52 0x00007ffff38424ce in WebCore::HTMLDocumentParser::attemptToEnd (this=0x808b50) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:474
#53 0x00007ffff3842585 in WebCore::HTMLDocumentParser::finish (this=0x808b50) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:502
#54 0x00007ffff3991445 in WebCore::DocumentWriter::end (this=0x7a2ab0) at ../../Source/WebCore/loader/DocumentWriter.cpp:250
#55 0x00007ffff397e49b in WebCore::DocumentLoader::finishedLoading (this=0x7a2a10, finishTime=0) at ../../Source/WebCore/loader/DocumentLoader.cpp:441
#56 0x00007ffff397e204 in WebCore::DocumentLoader::notifyFinished (this=0x7a2a10, resource=0x839540) at ../../Source/WebCore/loader/DocumentLoader.cpp:375
#57 0x00007ffff3a24a99 in WebCore::CachedResource::checkNotify (this=0x839540) at ../../Source/WebCore/loader/cache/CachedResource.cpp:334
#58 0x00007ffff3a24b80 in WebCore::CachedResource::finishLoading (this=0x839540) at ../../Source/WebCore/loader/cache/CachedResource.cpp:350
#59 0x00007ffff3a21b3a in WebCore::CachedRawResource::finishLoading (this=0x839540, data=0x6fbfe0) at ../../Source/WebCore/loader/cache/CachedRawResource.cpp:98
#60 0x00007ffff39d87da in WebCore::SubresourceLoader::didFinishLoading (this=0x839aa0, finishTime=0) at ../../Source/WebCore/loader/SubresourceLoader.cpp:310
#61 0x00007ffff39d4cc7 in WebCore::ResourceLoader::didFinishLoading (this=0x839aa0, finishTime=0) at ../../Source/WebCore/loader/ResourceLoader.cpp:517
#62 0x00007ffff4297429 in WebCore::readCallback (asyncResult=0x87a1d0, data=0x855a60) at ../../Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1302
#63 0x00007fffec1d82ea in async_ready_callback_wrapper (source_object=0x98cb30, res=0x87a1d0, user_data=0x855a60) at ginputstream.c:519
#64 0x00007fffec1f7ceb in g_task_return_now (task=0x87a1d0) at gtask.c:1108
#65 0x00007fffec1f7d09 in complete_in_idle_cb (task=0x87a1d0) at gtask.c:1117
#66 0x00007fffeb44e2e6 in g_main_dispatch (context=0x677bb0) at gmain.c:3065
#67 g_main_context_dispatch (context=context@entry=0x677bb0) at gmain.c:3641
#68 0x00007fffeb44e638 in g_main_context_iterate (context=0x677bb0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3712
#69 0x00007fffeb44ea3a in g_main_loop_run (loop=0x70c750) at gmain.c:3906
#70 0x00007ffff306a156 in WTF::RunLoop::run () at ../../Source/WTF/wtf/gtk/RunLoopGtk.cpp:59
#71 0x00007ffff2fa35e0 in WebKit::ChildProcessMain<WebKit::WebProcess, WebKit::WebProcessMain> (argc=2, argv=0x7fffffffda58) at ../../Source/WebKit2/Shared/unix/ChildProcessMain.h:61
#72 0x00007ffff2fa3445 in WebKit::WebProcessMainUnix (argc=2, argv=0x7fffffffda58) at ../../Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:73
#73 0x000000000040085d in main (argc=2, argv=0x7fffffffda58) at ../../Source/WebKit2/WebProcess/EntryPoint/unix/WebProcessMain.cpp:32
Comment 1 Brent Fulgham 2016-08-03 14:42:52 PDT
This reproduces in r204037.
Comment 2 Radar WebKit Bug Importer 2016-08-03 14:43:16 PDT
<rdar://problem/27686300>
Comment 3 zalan 2016-12-07 21:13:22 PST
Created attachment 296481 [details]
Patch
Comment 4 zalan 2016-12-07 21:15:19 PST
Created attachment 296482 [details]
Patch
Comment 5 Dave Hyatt 2016-12-07 21:37:55 PST
Comment on attachment 296481 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=296481&action=review

> Source/WebCore/ChangeLog:3
> +        Do not create multicolumn context for certain type of renderes.

renderers

> Source/WebCore/rendering/RenderBlockFlow.cpp:442
> +    // The following types are not supposed to create multicol context.
> +    if (isFieldset() || isFileUploadControl() || isTextControl() || isListBox())
> +        return false;
> +
>      if (!firstChild())
>          return false;
>  
> +    // If overflow-y is set to paged-x or paged-y on the body or html element, we'll handle the paginating in the RenderView instead.
> +    if ((style().overflowY() == OPAGEDX || style().overflowY() == OPAGEDY) && !(isDocumentElementRenderer() || isBody()))
> +        return true;

Seems like it would be slightly better to put your new code here below style().specifiesColumns(), since in normal usage, columns won't be specified on any of these things.

> Source/WebCore/rendering/RenderBlockFlow.cpp:3961
> +    return willCreateColumns(desiredColumnCount);

Do you plan to call this somewhere else? I'm a little confused why all this code can't just be inside requiresColumns.
Comment 6 Dave Hyatt 2016-12-07 21:40:25 PST
Comment on attachment 296482 [details]
Patch

r=me
Comment 7 zalan 2016-12-08 07:41:32 PST
Created attachment 296512 [details]
Patch
Comment 8 WebKit Commit Bot 2016-12-08 10:20:30 PST
Comment on attachment 296512 [details]
Patch

Clearing flags on attachment: 296512

Committed r209546: <http://trac.webkit.org/changeset/209546>
Comment 9 WebKit Commit Bot 2016-12-08 10:20:35 PST
All reviewed patches have been landed.  Closing bug.