Well, I'd like to make sure if it's really OOM that's happening in Dromaeo.
In my local testing on Linux, Dromaeo did indeed cause a segv, but it did not seem to be caused by a OOM. And seemed like the crash had nothing to do with the patch (c) above; I was able to reproduce the crash with ToT.
The below is the log from my gdb session (sorry for giant text blob!). Apparently there's a memory corruption stomping some region of Element (highlighted below)...
#0 blink::Member<blink::LocalFrame>::operator blink::LocalFrame* (this=0x15f2) at ../../third_party/WebKit/Source/platform/heap/Handle.h:694
#1 0x000055555a47aff5 in blink::Document::settings (this=0x1402) at ../../third_party/WebKit/Source/core/dom/Document.cpp:1479
#2 0x000055555ad93694 in blink::ImageLoader::getImageAnimationPolicy (this=0x252314d79e88, policy=@0x7fffffffa074: blink::ImageAnimationPolicyAllowed)
at ../../third_party/WebKit/Source/core/loader/ImageLoader.cpp:628
#3 0x000055555ab46d0f in blink::ImageResource::updateImageAnimationPolicy (this=0x205b9e01c520)
at ../../third_party/WebKit/Source/core/fetch/ImageResource.cpp:436
#4 0x000055555ad92f92 in blink::ImageLoader::notifyFinished (this=0x5af984328e8, resource=0x205b9e01c520)
at ../../third_party/WebKit/Source/core/loader/ImageLoader.cpp:457
#5 0x000055555a6d62ac in blink::HTMLImageLoader::notifyFinished (this=0x5af984328e8) at ../../third_party/WebKit/Source/core/html/HTMLImageLoader.cpp:82
#6 0x000055555ab5e9ae in blink::Resource::didAddClient (this=0x205b9e01c520, c=0x5af984328e8) at ../../third_party/WebKit/Source/core/fetch/Resource.cpp:536
#7 0x000055555ab44f23 in blink::ImageResource::didAddClient (this=0x205b9e01c520, c=0x5af984328e8)
at ../../third_party/WebKit/Source/core/fetch/ImageResource.cpp:105
#8 0x000055555ab5e720 in blink::Resource::addClient (this=0x205b9e01c520, client=0x5af984328e8) at ../../third_party/WebKit/Source/core/fetch/Resource.cpp:530
#9 0x000055555ad9266f in blink::ImageLoader::doUpdateFromElement (this=0x5af984328e8, bypassBehavior=blink::ImageLoader::DoNotBypassMainWorldCSP,
updateBehavior=blink::ImageLoader::UpdateIgnorePreviousError) at ../../third_party/WebKit/Source/core/loader/ImageLoader.cpp:360
#10 0x000055555ad92bef in blink::ImageLoader::updateFromElement (this=0x5af984328e8, updateBehavior=blink::ImageLoader::UpdateIgnorePreviousError)
at ../../third_party/WebKit/Source/core/loader/ImageLoader.cpp:394
#11 0x000055555a6cfd3b in blink::HTMLImageElement::selectSourceURL (this=0x31d584ce3bf8, behavior=blink::ImageLoader::UpdateIgnorePreviousError)
at ../../third_party/WebKit/Source/core/html/HTMLImageElement.cpp:666
at ../../third_party/WebKit/Source/core/html/HTMLImageElement.cpp:267
reason=blink::Element::ModifiedDirectly) at ../../third_party/WebKit/Source/core/dom/Element.cpp:1107
reason=blink::Element::ModifiedDirectly) at ../../third_party/WebKit/Source/core/dom/Element.cpp:1161
#15 0x000055555a4e8d25 in blink::Element::parserSetAttributes (this=0x31d584ce3bf8, attributeVector=WTF::Vector of length 4, capacity 4 = {...})
at ../../third_party/WebKit/Source/core/dom/Element.cpp:1297
#16 0x000055555a8e9113 in blink::setAttributes (element=0x31d584ce3bf8, token=0x7fffffffb4d8, parserContentPolicy=blink::AllowScriptingContent)
at ../../third_party/WebKit/Source/core/html/parser/HTMLConstructionSite.cpp:66
#17 0x000055555a8ea3f2 in blink::HTMLConstructionSite::createHTMLElement (this=0x5af98429c58, token=0x7fffffffb4d8)
at ../../third_party/WebKit/Source/core/html/parser/HTMLConstructionSite.cpp:757
#18 0x000055555a8ea82a in blink::HTMLConstructionSite::insertSelfClosingHTMLElement (this=0x5af98429c58, token=0x7fffffffb4d8)
at ../../third_party/WebKit/Source/core/html/parser/HTMLConstructionSite.cpp:633
#19 0x000055555a869011 in blink::HTMLTreeBuilder::processStartTagForInBody (this=0x5af98429c40, token=0x7fffffffb4d8)
at ../../third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp:791
#20 0x000055555a862fa2 in blink::HTMLTreeBuilder::processStartTag (this=0x5af98429c40, token=0x7fffffffb4d8)
at ../../third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp:1143
#21 0x000055555a86231a in blink::HTMLTreeBuilder::processToken (this=0x5af98429c40, token=0x7fffffffb4d8)
at ../../third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp:417
#22 0x000055555a8613bb in blink::HTMLTreeBuilder::constructTree (this=0x5af98429c40, token=0x7fffffffb4d8)
at ../../third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp:377
#23 0x000055555a829c01 in blink::HTMLDocumentParser::constructTreeFromCompactHTMLToken (this=0x5af984298c8, compactToken=...)
at ../../third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp:710
#24 0x000055555a8297cd in blink::HTMLDocumentParser::processParsedChunkFromBackgroundParser (this=0x5af984298c8, popChunk=...)
at ../../third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp:492
#25 0x000055555a827ff8 in blink::HTMLDocumentParser::pumpPendingSpeculations (this=0x5af984298c8)
at ../../third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp:563
#26 0x000055555a827b3c in blink::HTMLDocumentParser::resumeParsingAfterYield (this=0x5af984298c8)
at ../../third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp:307
#27 0x000055555a83d968 in blink::HTMLParserScheduler::continueParsing (this=0x2faeb0afdd90)
at ../../third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.cpp:165
#28 0x000055555a83e179 in WTF::FunctionWrapper<void (blink::HTMLParserScheduler::*)()>::operator() (this=0x180e2ffe4568, c=0x2faeb0afdd90)
at ../../third_party/WebKit/Source/wtf/Functional.h:83
#29 0x000055555a83e100 in WTF::PartBoundFunctionImpl<1, WTF::FunctionWrapper<void (blink::HTMLParserScheduler::*)()>, void (blink::HTMLParserScheduler*)>::operator()() (this=0x180e2ffe4560) at ../../third_party/WebKit/Source/wtf/Functional.h:178
#30 0x00005555617465ea in blink::CancellableTaskFactory::CancellableTask::run (this=0x180e2ecc06b0)
at ../../third_party/WebKit/Source/platform/scheduler/CancellableTaskFactory.cpp:29
#31 0x000055555db04bee in scheduler::WebSchedulerImpl::runTask (task=...) at ../../components/scheduler/child/web_scheduler_impl.cc:46
#32 0x000055555db06aca in base::internal::RunnableAdapter<void (*)(scoped_ptr<blink::WebThread::Task, base::DefaultDeleter<blink::WebThread::Task> >)>::Run (
this=0x7fffffffb888, args=...) at ../../base/bind_internal.h:157
#33 0x000055555db06a02 in base::internal::InvokeHelper<false, void, base::internal::RunnableAdapter<void (*)(scoped_ptr<blink::WebThread::Task, base::DefaultDeleter<blink::WebThread::Task> >)>, base::internal::TypeList<scoped_ptr<blink::WebThread::Task, base::DefaultDeleter<blink::WebThread::Task> > > >::MakeItSo (
runnable=..., args=...) at ../../base/bind_internal.h:293
#34 0x000055555db069b3 in base::internal::Invoker<base::IndexSequence<0ul>, base::internal::BindState<base::internal::RunnableAdapter<void (*)(scoped_ptr<blink::WebThread::Task, base::DefaultDeleter<blink::WebThread::Task> >)>, void (scoped_ptr<blink::WebThread::Task, base::DefaultDeleter<blink::WebThread::Task> >), base::internal::TypeList<base::internal::PassedWrapper<scoped_ptr<blink::WebThread::Task, base::DefaultDeleter<blink::WebThread::Task> > > > >, base::internal::TypeList<base::internal::UnwrapTraits<base::internal::PassedWrapper<scoped_ptr<blink::WebThread::Task, base::DefaultDeleter<blink::WebThread::Task> > > > >, base::internal::InvokeHelper<false, void, base::internal::RunnableAdapter<void (*)(scoped_ptr<blink::WebThread::Task, base::DefaultDeleter<blink::WebThread::Task> >)>, base::internal::TypeList<scoped_ptr<blink::WebThread::Task, base::DefaultDeleter<blink::WebThread::Task> > > >, void ()>::Run(base::internal::BindStateBase*) (base=0x180e2f864790) at ../../base/bind_internal.h:343
#35 0x000055555625359e in base::Callback<void ()>::Run() const (this=0x7fffffffbb38) at ../../base/callback.h:396
#36 0x00005555575f7498 in base::debug::TaskAnnotator::RunTask (this=0x180e2df44664, queue_function=0x555563d3f3d6 <.L.str.26> "TaskQueueManager::PostTask",
run_function=0x555563d3f3f1 <.L.str.27> "TaskQueueManager::RunTask", pending_task=...) at ../../base/debug/task_annotator.cc:62
#37 0x000055555dafb86d in scheduler::TaskQueueManager::ProcessTaskFromWorkQueue (this=0x180e2df44620, queue_index=5, has_previous_task=false,
previous_task=0x7fffffffbdc0) at ../../components/scheduler/child/task_queue_manager.cc:674
#38 0x000055555dafa3a4 in scheduler::TaskQueueManager::DoWork (this=0x180e2df44620, posted_from_main_thread=false)
at ../../components/scheduler/child/task_queue_manager.cc:627
#39 0x000055555db04246 in base::internal::RunnableAdapter<void (scheduler::TaskQueueManager::*)(bool)>::Run (this=0x7fffffffc1c0, object=0x180e2df44620,
args=@0x180e2ded9658: false) at ../../base/bind_internal.h:176
#40 0x000055555db04126 in base::internal::InvokeHelper<true, void, base::internal::RunnableAdapter<void (scheduler::TaskQueueManager::*)(bool)>, base::internal::TypeList<base::WeakPtr<scheduler::TaskQueueManager> const&, bool const&> >::MakeItSo (runnable=..., weak_ptr=..., args=@0x180e2ded9658: false)
at ../../base/bind_internal.h:303
#41 0x000055555db040c1 in base::internal::Invoker<base::IndexSequence<0ul, 1ul>, base::internal::BindState<base::internal::RunnableAdapter<void (scheduler::TaskQueueManager::*)(bool)>, void (scheduler::TaskQueueManager*, bool), base::internal::TypeList<base::WeakPtr<scheduler::TaskQueueManager>, bool> >, base::internal::TypeList<base::internal::UnwrapTraits<base::WeakPtr<scheduler::TaskQueueManager> >, base::internal::UnwrapTraits<bool> >, base::internal::InvokeHelper<true, void, base::internal::RunnableAdapter<void (scheduler::TaskQueueManager::*)(bool)>, base::internal::TypeList<base::WeakPtr<scheduler::TaskQueueManager> const&, bool const&> >, void ()>::Run(base::internal::BindStateBase*) (base=0x180e2ded9620) at ../../base/bind_internal.h:343
#42 0x000055555625359e in base::Callback<void ()>::Run() const (this=0x7fffffffc648) at ../../base/callback.h:396
#43 0x00005555575f7498 in base::debug::TaskAnnotator::RunTask (this=0x180e2df3f390, queue_function=0x5555632983ad <.L.str.9> "MessageLoop::PostTask",
run_function=0x5555632983c3 <.L.str.15> "MessageLoop::RunTask", pending_task=...) at ../../base/debug/task_annotator.cc:62
#44 0x00005555574deb51 in base::MessageLoop::RunTask (this=0x180e2df3f1a0, pending_task=...) at ../../base/message_loop/message_loop.cc:458
#45 0x00005555574deca8 in base::MessageLoop::DeferOrRunPendingTask (this=0x180e2df3f1a0, pending_task=...) at ../../base/message_loop/message_loop.cc:468
#46 0x00005555574dee72 in base::MessageLoop::DoWork (this=0x180e2df3f1a0) at ../../base/message_loop/message_loop.cc:580
#47 0x00005555574f2743 in base::MessagePumpDefault::Run (this=0x180e2dea9da0, delegate=0x180e2df3f1a0) at ../../base/message_loop/message_pump_default.cc:34
#48 0x00005555574de70f in base::MessageLoop::RunHandler (this=0x180e2df3f1a0) at ../../base/message_loop/message_loop.cc:424
#49 0x00005555575249f4 in base::RunLoop::Run (this=0x7fffffffcac8) at ../../base/run_loop.cc:55
#50 0x00005555574ddc86 in base::MessageLoop::Run (this=0x180e2df3f1a0) at ../../base/message_loop/message_loop.cc:286
#51 0x000055555dbe1c8b in content::RendererMain (parameters=...) at ../../content/renderer/renderer_main.cc:220
#52 0x00005555573c4a66 in content::RunNamedProcessTypeMain (process_type=..., main_function_params=..., delegate=0x7fffffffd840)
at ../../content/app/content_main_runner.cc:388
#53 0x00005555573c673d in content::ContentMainRunnerImpl::Run (this=0x180e2dde6380) at ../../content/app/content_main_runner.cc:801
#54 0x00005555573c4062 in content::ContentMain (params=...) at ../../content/app/content_main.cc:19
#55 0x00005555561249a2 in ChromeMain (argc=17, argv=0x7fffffffd988) at ../../chrome/app/chrome_main.cc:66
#56 0x0000555556124952 in main (argc=17, argv=0x7fffffffd988) at ../../chrome/app/chrome_exe_main_aura.cc:17
#2 0x000055555ad93694 in blink::ImageLoader::getImageAnimationPolicy (this=0x252314d79e88, policy=@0x7fffffffa074: blink::ImageAnimationPolicyAllowed)
at ../../third_party/WebKit/Source/core/loader/ImageLoader.cpp:628
628 if (!element()->document().settings())
(gdb) p m_element
$1 = {
m_raw = 0x31d584d1b0b0
}
(gdb) p *m_element
$2 = (blink::Element &) @0x31d584d1b0b0: {
<blink::ContainerNode> = {
<blink::Node> = {
<blink::EventTarget> = {
<blink::GarbageCollectedFinalized<blink::EventTarget>> = {
<blink::GarbageCollected<blink::EventTarget>> = {<No data fields>}, <No data fields>},
<blink::ScriptWrappable> = {
_vptr$ScriptWrappable = 0x31d584d1b038,
m_wrapper = {
<v8::PersistentBase<v8::Object>> = {
val_ = 0x31d584d1b140
}, <No data fields>}
},
},
members of blink::Node:
m_nodeFlags = 3423658256,
m_parentOrShadowHostNode = {
m_raw = 0x31d584d1b0f0
},
m_treeScope = {
m_raw = 0x31d584d1b0f0
},
m_previous = {
m_raw = 0x2faeb0a40350
},
m_next = {
m_raw = 0x0
},
m_data = {
m_layoutObject = 0x2a2afff100d80050,
m_rareData = 0x2a2afff100d80050
}
},
members of blink::ContainerNode:
m_firstChild = {
m_raw = 0x5555686a8148 <vtable for blink::Text+16>
},
m_lastChild = {
m_raw = 0x0 // This is strange, because m_firstChild is non-null
}
},
members of blink::Element:
m_tagName = <error reading variable: Cannot access memory at address 0x1422>{
m_impl = WTF::RefPtr((blink::QualifiedName::QualifiedNameImpl *)0x1402)
},
m_elementData = {
m_raw = 0x31d584d1b088
}
}
(gdb) x/128a &*m_element
0x31d584d1b0b0: 0x31d584d1b038 0x31d584d1b140
0x31d584d1b0c0: 0x218acc10e110 0x31d584d1b0f0
0x31d584d1b0d0: 0x31d584d1b0f0 0x2faeb0a40350
0x31d584d1b0e0: 0x0 0x2a2afff100d80050
0x31d584d1b0f0: 0x5555686a8148 <_ZTVN5blink4TextE+16> 0x0
0x31d584d1b100: 0x1402 0x31d584d1b088
0x31d584d1b110: 0x31d584d65a38 0x0
0x31d584d1b120: 0x0 0x218acc103b90
0x31d584d1b130: 0x11c67d638100 0x2a2afff100d80078
0x31d584d1b140: 0x55556888e590 <_ZTVN5blink16HTMLOListElementE+16> 0x0
0x31d584d1b150: 0x141c 0x31d584d15980
0x31d584d1b160: 0x31d584d65a38 0x31d584d1b088
0x31d584d1b170: 0x0 0x218acc10e210
0x31d584d1b180: 0x31d584d1b1b8 0x31d584d1b2c0
0x31d584d1b190: 0x2faeb0a3dbf0 0x0
0x31d584d1b1a0: 0xbadbeef 0x4
0x31d584d1b1b0: 0x2a2afff100d80050 0x5555686a8148 <_ZTVN5blink4TextE+16>
0x31d584d1b1c0: 0x0 0x1402
0x31d584d1b1d0: 0x31d584d1b140 0x31d584d65a38
0x31d584d1b1e0: 0x0 0x31d584d1b208
0x31d584d1b1f0: 0x0 0x11c66ee21aa0
0x31d584d1b200: 0x2a2afff100d80068 0x55556888c050 <_ZTVN5blink13HTMLLIElementE+16>
0x31d584d1b210: 0x0 0x141c
0x31d584d1b220: 0x31d584d1b140 0x31d584d65a38
0x31d584d1b230: 0x31d584d1b1b8 0x31d584d1b2c0
0x31d584d1b240: 0x218accdbe6e0 0x31d584d1b270
0x31d584d1b250: 0x31d584d1b270 0x2faeb0a3cb10
0x31d584d1b260: 0x0 0x2a2afff100d80050
0x31d584d1b270: 0x5555686a8148 <_ZTVN5blink4TextE+16> 0x0
0x31d584d1b280: 0x1402 0x31d584d1b208
0x31d584d1b290: 0x31d584d65a38 0x0
0x31d584d1b2a0: 0x0 0x218acc103c30
0x31d584d1b2b0: 0x11c67d5e6870 0x2a2afff100d80068
0x31d584d1b2c0: 0x55556888c050 <_ZTVN5blink13HTMLLIElementE+16> 0x0
0x31d584d1b2d0: 0x141c 0x31d584d1b140
0x31d584d1b2e0: 0x31d584d65a38 0x31d584d1b208
0x31d584d1b2f0: 0x0 0x218accdbe7f8
0x31d584d1b300: 0x31d584d1b328 0x31d584d1b328
0x31d584d1b310: 0x2faeb0a3cb10 0x0
0x31d584d1b320: 0x2a2afff100d80050 0x5555686a8148 <_ZTVN5blink4TextE+16>
0x31d584d1b330: 0x0 0x1402
0x31d584d1b340: 0x31d584d1b2c0 0x31d584d65a38
0x31d584d1b350: 0x0 0x0
0x31d584d1b360: 0x218acc103cd0 0x11c67dcd0cb8
0x31d584d1b370: 0x2a2afff100d80050 0x5555686a8148 <_ZTVN5blink4TextE+16>
0x31d584d1b380: 0x0 0x1402
0x31d584d1b390: 0x31d584d68f78 0x31d584d65a38
0x31d584d1b3a0: 0x31d584d15980 0x31d584d1b3c8
0x31d584d1b3b0: 0x0 0x11c66ee26720
0x31d584d1b3c0: 0x2a2afff100d80068 0x55556888af58 <_ZTVN5blink18HTMLHeadingElementE+16>
0x31d584d1b3d0: 0x0 0x141c
0x31d584d1b3e0: 0x31d584d68f78 0x31d584d65a38
0x31d584d1b3f0: 0x31d584d1b378 0x31d584d1b508
0x31d584d1b400: 0x218acc10e310 0x31d584d1b430
0x31d584d1b410: 0x31d584d1b4b8 0x2faeb0a3bb50