<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>40753</bug_id>
          
          <creation_ts>2010-06-16 18:40:53 -0700</creation_ts>
          <short_desc>Hit testing on margins of body and head elements doesn&apos;t recur</short_desc>
          <delta_ts>2011-09-20 15:32:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>68446</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ojan Vafai">ojan</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>cshu</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>kenneth</cc>
    
    <cc>leviw</cc>
    
    <cc>pnormand</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>239172</commentid>
    <comment_count>0</comment_count>
      <attachid>58951</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-06-16 18:40:53 -0700</bug_when>
    <thetext>Created attachment 58951
test case

See the test case. Clicking in white-space when the body element is scrolled puts the cursor in the wrong place.

Chromium bug: http://crbug.com/45151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469796</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-19 16:35:42 -0700</bug_when>
    <thetext>It turned out that this bug is nothing to do with scroll.  It&apos;s about hit testing code not recursing properly when hit testing is done on margins of body and head elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469800</commentid>
    <comment_count>2</comment_count>
      <attachid>107943</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-19 16:42:26 -0700</bug_when>
    <thetext>Created attachment 107943
fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469810</commentid>
    <comment_count>3</comment_count>
      <attachid>107943</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-19 16:57:55 -0700</bug_when>
    <thetext>Comment on attachment 107943
fixes the bug

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:4235
&gt; +    if (!ancestor || ancestor-&gt;node()-&gt;hasTagName(htmlTag) || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())

I’m not sure that htmlTag is the best way to check for the document element. It’s probably neither the most efficient way nor the most reliable. The best way I can think of would be to tie this as closely as possible to the code that makes body and head elements have special margins. I was unable to quickly research that because I don’t know what that code is.

Two other ways that come to mind that may be better:

    ancestor-&gt;isRenderView()
    ancestor-&gt;node()-&gt;parent() &amp;&amp; ancestor-&gt;node()-&gt;parent()-&gt;isDocumentNode()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469811</commentid>
    <comment_count>4</comment_count>
      <attachid>107943</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-19 17:00:31 -0700</bug_when>
    <thetext>Comment on attachment 107943
fixes the bug

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

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:4235
&gt;&gt; +    if (!ancestor || ancestor-&gt;node()-&gt;hasTagName(htmlTag) || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())
&gt; 
&gt; I’m not sure that htmlTag is the best way to check for the document element. It’s probably neither the most efficient way nor the most reliable. The best way I can think of would be to tie this as closely as possible to the code that makes body and head elements have special margins. I was unable to quickly research that because I don’t know what that code is.
&gt; 
&gt; Two other ways that come to mind that may be better:
&gt; 
&gt;     ancestor-&gt;isRenderView()
&gt;     ancestor-&gt;node()-&gt;parent() &amp;&amp; ancestor-&gt;node()-&gt;parent()-&gt;isDocumentNode()

ancestor-&gt;isRenderView() sounds like a better solution. Try me try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469823</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-19 17:40:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Two other ways that come to mind that may be better:
&gt; &gt; 
&gt; &gt;     ancestor-&gt;isRenderView()
&gt; &gt;     ancestor-&gt;node()-&gt;parent() &amp;&amp; ancestor-&gt;node()-&gt;parent()-&gt;isDocumentNode()
&gt; 
&gt; ancestor-&gt;isRenderView() sounds like a better solution. Try me try.

Actually, isRenderView() doesn&apos;t really work because html element&apos;s render object is a child of the render layer.  I&apos;ll do the following instead:
ancestor-&gt;hasLayer() &amp;&amp; ancestor-&gt;parent()-&gt;isRenderView()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469878</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-19 19:47:02 -0700</bug_when>
    <thetext>Committed r95509: &lt;http://trac.webkit.org/changeset/95509&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470031</commentid>
    <comment_count>7</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-09-20 06:48:38 -0700</bug_when>
    <thetext>It seems this patch broke a test in GTK: fast/repaint/japanese-rl-selection-repaint-in-regions.html

http://webkit-bots.igalia.com/amd64/svn_95509.core-when_1316490844-_-who_DumpRenderTree-_-why_11.trace.html

#0  0x00002b5eacd4ebd4 in WebCore::positionForPointRespectingEditingBoundaries (parent=0x54df1988, child=0x54e3f7c8, pointInParentCoordinates=...) at ../../Source/WebCore/rendering/RenderBlock.cpp:4235
4235	    if (!ancestor || (ancestor-&gt;hasLayer() &amp;&amp; ancestor-&gt;parent()-&gt;isRenderView()) || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())


Thread 1 (Thread 0x2b5eba203e40 (LWP 20635)):
#0  0x00002b5eacd4ebd4 in WebCore::positionForPointRespectingEditingBoundaries (parent=0x54df1988, child=0x54e3f7c8, pointInParentCoordinates=...) at ../../Source/WebCore/rendering/RenderBlock.cpp:4235
#1  0x00002b5eacd4f44a in WebCore::RenderBlock::positionForPoint (this=0x54df1988, point=...) at ../../Source/WebCore/rendering/RenderBlock.cpp:4345
#2  0x00002b5eacb7b5ff in WebCore::selectionExtentRespectingEditingBoundary (selection=..., localPoint=..., targetNode=0x54a20880) at ../../Source/WebCore/page/EventHandler.cpp:648
#3  0x00002b5eacb7b6ac in WebCore::EventHandler::updateSelectionForMouseDrag (this=0x1630ab0, hitTestResult=...) at ../../Source/WebCore/page/EventHandler.cpp:660
#4  0x00002b5eacb7b154 in WebCore::EventHandler::handleMouseDraggedEvent (this=0x1630ab0, event=...) at ../../Source/WebCore/page/EventHandler.cpp:579
#5  0x00002b5eacb7ee83 in WebCore::EventHandler::handleMouseMoveEvent (this=0x1630ab0, mouseEvent=..., hoveredNode=0x7fffa3242960) at ../../Source/WebCore/page/EventHandler.cpp:1657
#6  0x00002b5eacb7e4fa in WebCore::EventHandler::mouseMoved (this=0x1630ab0, event=...) at ../../Source/WebCore/page/EventHandler.cpp:1527
#7  0x00002b5eac4382b6 in webkit_web_view_motion_event (widget=0x1600030, event=0x4447e620) at ../../Source/WebKit/gtk/webkit/webkitwebview.cpp:848
#8  0x00002b5eaf4c7428 in ?? () from /usr/lib/libgtk-3.so.0
#9  0x00002b5eb0e80e7e in g_closure_invoke (closure=0x158c750, return_value=0x7fffa3242c00, n_param_values=2, param_values=0x2b5efc1b0720, invocation_hint=0x7fffa3242bc0) at /tmp/buildd/glib2.0-2.28.6/./gobject/gclosure.c:767
#10 0x00002b5eb0e926e8 in signal_emit_unlocked_R (node=&lt;optimized out&gt;, detail=0, instance=0x1600030, emission_return=0x7fffa3242d70, instance_and_params=0x2b5efc1b0720) at /tmp/buildd/glib2.0-2.28.6/./gobject/gsignal.c:3290
#11 0x00002b5eb0e9baa5 in g_signal_emit_valist (instance=&lt;optimized out&gt;, signal_id=&lt;optimized out&gt;, detail=&lt;optimized out&gt;, var_args=&lt;optimized out&gt;) at /tmp/buildd/glib2.0-2.28.6/./gobject/gsignal.c:2993
#12 0x00002b5eb0e9bed3 in g_signal_emit (instance=&lt;optimized out&gt;, signal_id=&lt;optimized out&gt;, detail=&lt;optimized out&gt;) at /tmp/buildd/glib2.0-2.28.6/./gobject/gsignal.c:3040
#13 0x00002b5eaf5e9e59 in ?? () from /usr/lib/libgtk-3.so.0
#14 0x00002b5eaf4c6c8a in gtk_propagate_event () from /usr/lib/libgtk-3.so.0
#15 0x00002b5eaf4c7023 in gtk_main_do_event () from /usr/lib/libgtk-3.so.0
#16 0x0000000000434183 in dispatchEvent (event=0x4447e620) at ../../Tools/DumpRenderTree/gtk/EventSender.cpp:562
#17 0x000000000043431a in replaySavedEvents () at ../../Tools/DumpRenderTree/gtk/EventSender.cpp:605
#18 0x000000000043411d in sendOrQueueEvent (event=0x4447e020, shouldReplaySavedEvents=true) at ../../Tools/DumpRenderTree/gtk/EventSender.cpp:545
#19 0x0000000000433563 in mouseUpCallback (context=0x2b5efbab4100, function=0x2b5efbf0b320, thisObject=0x2b5f05492160, argumentCount=0, arguments=0x7fffa3243078, exception=0x7fffa3243118) at ../../Tools/DumpRenderTree/gtk/EventSender.cpp:372
#20 0x00002b5eab57ca90 in JSC::JSCallbackFunction::call (exec=0x2b5efbab4100) at ../../Source/JavaScriptCore/API/JSCallbackFunction.cpp:72
#21 0x00002b5eab64b06b in JSC::cti_op_call_NotJSFunction (args=0x7fffa3243250) at ../../Source/JavaScriptCore/jit/JITStubs.cpp:2280
#22 0x00002b5eab64656d in JSC::JITThunks::tryCacheGetByID (callFrame=0x2b5efbab40c0, codeBlock=0x7fffa3243250, returnAddress=..., baseValue=..., propertyName=UnicodeEncodeError: &apos;ascii&apos; codec can&apos;t encode characters in position 0-2: ordinal not in range(128)
, slot=..., stubInfo=0x1662ab0) at ../../Source/JavaScriptCore/jit/JITStubs.cpp:942
#23 0x00002b5eab6185eb in JSC::JITCode::execute (this=0x2b5f0ed261b8, registerFile=0x1661f58, callFrame=0x2b5efbab4040, globalData=0x1662ab0) at ../../Source/JavaScriptCore/jit/JITCode.h:103
#24 0x00002b5eab614d37 in JSC::Interpreter::executeCall (this=0x1661f40, callFrame=0x2b5efbec5328, function=0x2b5f05491560, callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at ../../Source/JavaScriptCore/interpreter/Interpreter.cpp:971
#25 0x00002b5eab6b4d58 in JSC::call (exec=0x2b5efbec5328, functionObject=..., callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at ../../Source/JavaScriptCore/runtime/CallData.cpp:39
#26 0x00002b5eac530f0a in WebCore::JSMainThreadExecState::call (exec=0x2b5efbec5328, functionObject=..., callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at ../../Source/WebCore/bindings/js/JSMainThreadExecState.h:52
#27 0x00002b5eac562a2e in WebCore::JSEventListener::handleEvent (this=0x54e7a090, scriptExecutionContext=0x54a20a18, event=0x54e11c30) at ../../Source/WebCore/bindings/js/JSEventListener.cpp:129
#28 0x00002b5eac7ab33b in WebCore::EventTarget::fireEventListeners (this=0x54e4e6b0, event=0x54e11c30, d=0x54e4e798, entry=WTF::Vector of length 1, capacity 1 = {...}) at ../../Source/WebCore/dom/EventTarget.cpp:360
#29 0x00002b5eac7ab1d8 in WebCore::EventTarget::fireEventListeners (this=0x54e4e6b0, event=0x54e11c30) at ../../Source/WebCore/dom/EventTarget.cpp:329
#30 0x00002b5eacb6e19e in WebCore::DOMWindow::dispatchEvent (this=0x54e4e6b0, prpEvent=..., prpTarget=...) at ../../Source/WebCore/page/DOMWindow.cpp:1597
#31 0x00002b5eacb6e2b2 in WebCore::DOMWindow::dispatchTimedEvent (this=0x54e4e6b0, event=..., target=0x54a20880, startTime=0x546df2b8, endTime=0x546df2c0) at ../../Source/WebCore/page/DOMWindow.cpp:1609
#32 0x00002b5eacb6deee in WebCore::DOMWindow::dispatchLoadEvent (this=0x54e4e6b0) at ../../Source/WebCore/page/DOMWindow.cpp:1572
#33 0x00002b5eac7547be in WebCore::Document::dispatchWindowLoadEvent (this=0x54a20880) at ../../Source/WebCore/dom/Document.cpp:3469
#34 0x00002b5eac74f7f8 in WebCore::Document::implicitClose (this=0x54a20880) at ../../Source/WebCore/dom/Document.cpp:2183
#35 0x00002b5eacad6551 in WebCore::FrameLoader::checkCallImplicitClose (this=0x1630428) at ../../Source/WebCore/loader/FrameLoader.cpp:795
#36 0x00002b5eacad6324 in WebCore::FrameLoader::checkCompleted (this=0x1630428) at ../../Source/WebCore/loader/FrameLoader.cpp:743
#37 0x00002b5eacad608b in WebCore::FrameLoader::finishedParsing (this=0x1630428) at ../../Source/WebCore/loader/FrameLoader.cpp:677
#38 0x00002b5eac757fea in WebCore::Document::finishedParsing (this=0x54a20880) at ../../Source/WebCore/dom/Document.cpp:4286
#39 0x00002b5eac9b228a in WebCore::HTMLTreeBuilder::finished (this=0x533595a0) at ../../Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2826
#40 0x00002b5eac987b9c in WebCore::HTMLDocumentParser::end (this=0x12a3c330) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:381
#41 0x00002b5eac987c99 in WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd (this=0x12a3c330) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:390
#42 0x00002b5eac986daf in WebCore::HTMLDocumentParser::prepareToStopParsing (this=0x12a3c330) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:153
#43 0x00002b5eac987cde in WebCore::HTMLDocumentParser::attemptToEnd (this=0x12a3c330) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:402
#44 0x00002b5eac987d97 in WebCore::HTMLDocumentParser::finish (this=0x12a3c330) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:429
#45 0x00002b5eacad10b0 in WebCore::DocumentWriter::endIfNotLoadingMainResource (this=0x546deb10) at ../../Source/WebCore/loader/DocumentWriter.cpp:235
#46 0x00002b5eacad0fc7 in WebCore::DocumentWriter::end (this=0x546deb10) at ../../Source/WebCore/loader/DocumentWriter.cpp:214
#47 0x00002b5eacac4f63 in WebCore::DocumentLoader::finishedLoading (this=0x546de9f0) at ../../Source/WebCore/loader/DocumentLoader.cpp:289
#48 0x00002b5eacadca8b in WebCore::FrameLoader::finishedLoading (this=0x1630428) at ../../Source/WebCore/loader/FrameLoader.cpp:2086
#49 0x00002b5eacb116f8 in WebCore::MainResourceLoader::didFinishLoading (this=0x54de1350, finishTime=0) at ../../Source/WebCore/loader/MainResourceLoader.cpp:485
#50 0x00002b5eacb1e16b in WebCore::ResourceLoader::didFinishLoading (this=0x54de1350, finishTime=0) at ../../Source/WebCore/loader/ResourceLoader.cpp:460
#51 0x00002b5eaccb3aba in WebCore::readCallback (source=0x4c80dea0, asyncResult=0x4c80dd80, data=0x0) at ../../Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:781
#52 0x00002b5eb0b9bb59 in async_ready_callback_wrapper (source_object=0x4c80dea0, res=0x4c80dd80, user_data=0x0) at /tmp/buildd/glib2.0-2.28.6/./gio/ginputstream.c:470
#53 0x00002b5eb0baba68 in complete_in_idle_cb_for_thread (_data=0x533594f0) at /tmp/buildd/glib2.0-2.28.6/./gio/gsimpleasyncresult.c:812
#54 0x00002b5eb17184a3 in g_main_dispatch (context=0x1589e60) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:2440
#55 g_main_context_dispatch (context=0x1589e60) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3013
#56 0x00002b5eb1718c80 in g_main_context_iterate (context=0x1589e60, block=1, dispatch=1, self=&lt;optimized out&gt;) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3091
#57 0x00002b5eb17192f2 in g_main_loop_run (loop=0x54dac100) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3299
#58 0x00002b5eaf4c64cd in gtk_main () from /usr/lib/libgtk-3.so.0
#59 0x000000000042f979 in runTest (testPathOrURL=...) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:710
#60 0x000000000042efb1 in runTestingServerLoop () at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:502
#61 0x00000000004312ec in main (argc=2, argv=0x7fffa3244b18) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470077</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 08:28:35 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; It seems this patch broke a test in GTK: fast/repaint/japanese-rl-selection-repaint-in-regions.html
&gt; 
&gt; http://webkit-bots.igalia.com/amd64/svn_95509.core-when_1316490844-_-who_DumpRenderTree-_-why_11.trace.html
&gt; 
&gt; #0  0x00002b5eacd4ebd4 in WebCore::positionForPointRespectingEditingBoundaries (parent=0x54df1988, child=0x54e3f7c8, pointInParentCoordinates=...) at ../../Source/WebCore/rendering/RenderBlock.cpp:4235
&gt; 4235        if (!ancestor || (ancestor-&gt;hasLayer() &amp;&amp; ancestor-&gt;parent()-&gt;isRenderView()) || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())

That doesn&apos;t make much sense.

I only added &quot;ancestor-&gt;hasLayer() &amp;&amp; ancestor-&gt;parent()-&gt;isRenderView()&quot; but ancestor can&apos;t be null here or else would have hit !ancestor. And ancestor should have non-null parent because we know it has a node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470104</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-09-20 09:21:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; It seems this patch broke a test in GTK: fast/repaint/japanese-rl-selection-repaint-in-regions.html
&gt; &gt; 
&gt; &gt; http://webkit-bots.igalia.com/amd64/svn_95509.core-when_1316490844-_-who_DumpRenderTree-_-why_11.trace.html
&gt; &gt; 
&gt; &gt; #0  0x00002b5eacd4ebd4 in WebCore::positionForPointRespectingEditingBoundaries (parent=0x54df1988, child=0x54e3f7c8, pointInParentCoordinates=...) at ../../Source/WebCore/rendering/RenderBlock.cpp:4235
&gt; &gt; 4235        if (!ancestor || (ancestor-&gt;hasLayer() &amp;&amp; ancestor-&gt;parent()-&gt;isRenderView()) || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())
&gt; 
&gt; That doesn&apos;t make much sense.
&gt; 
&gt; I only added &quot;ancestor-&gt;hasLayer() &amp;&amp; ancestor-&gt;parent()-&gt;isRenderView()&quot; but ancestor can&apos;t be null here or else would have hit !ancestor. And ancestor should have non-null parent because we know it has a node.

Well the m_hasLayer is true and m_parent field of ancestor is null:

(gdb) p ancestor
$1 = (WebCore::RenderObject *) 0x52047a98
(gdb) p *ancestor
$2 = {&lt;WebCore::CachedResourceClient&gt; = {_vptr.CachedResourceClient = 0x2acbf0ae4d70}, m_style = {m_ptr = 0x1085a970}, m_node = 0x52896020, 
  m_parent = 0x0, m_previous = 0x0, m_next = 0x0, m_hasAXObject = true, m_setNeedsLayoutForbidden = false, m_needsLayout = false, 
  m_needsPositionedMovementLayout = false, m_normalChildNeedsLayout = false, m_posChildNeedsLayout = false, 
  m_needsSimplifiedNormalFlowLayout = false, m_preferredLogicalWidthsDirty = true, m_floating = false, m_positioned = false, 
  m_relPositioned = false, m_paintBackground = true, m_isAnonymous = false, m_isText = false, m_isBox = true, m_inline = false, 
  m_replaced = false, m_horizontalWritingMode = false, m_isDragging = false, m_hasLayer = true, m_hasOverflowClip = false, m_hasTransform = false, 
  m_hasReflection = false, m_hasCounterNodeMap = false, m_everHadLayout = true, m_childrenInline = false, m_marginBeforeQuirk = false, 
  m_marginAfterQuirk = false, m_hasMarkupTruncation = false, m_selectionState = 0, m_hasColumns = false, static s_affectsParentBlock = false}

So the crash happens when calling ancestor-&gt;parent()-&gt;isRenderView(). Would it make sense to check is the ancestor has a parent before this call?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470130</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 10:01:28 -0700</bug_when>
    <thetext>Reopen the bug. I&apos;ll land the patch again with a null check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470139</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 10:12:10 -0700</bug_when>
    <thetext>Alright I&apos;m just going to land my original patch.  It seems like a too much trouble for me figure out how to call hasLayer/isRenderView properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470145</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 10:21:24 -0700</bug_when>
    <thetext>Per IRC discussion with philn-tp, we have:
(gdb) p ancestor-&gt;showRenderTreeForThis()
* RenderView 0x818de3c                  	#document	0x819b0f0
  RenderBlock 0x81a42ac                	HTML	0x81a1e10 STYLE=border:10px solid maroon; -webkit-writing-mode:vertical-rl
    RenderBody 0x81a4d3c               	BODY	0x81a22c0 STYLE=border:5px solid black;
      RenderRegion 0x81e51a4           	DIV	0x81e4828 STYLE=content:-webkit-from-flow(&apos;thread&apos;); position:absolute;right:100px; top:100px; border:2px solid black; width:400px; height:400px
  RenderFlowThread 0x81a506c           	#document	0x819b0f0
    RenderBlock 0x81a5584              	DIV	0x81a4a60 STYLE=-webkit-flow:&apos;thread&apos;
      RenderText 0x814b94c             	#text	0x81a4b10 &quot;\nせっかく見つけたすばらしい記事がどこにあったか忘れてしまった経験はありますかならタイトルとアドレスだけでなく、訪問したウェブページのコンテンツからも検索することができます。せっかく見つけたすばらしい記事がどこにあったか忘れてしまった経験はありますか ならタイトルとアドレスだけでなく、訪問したウェブページのコンテンツからも検索することができます。訪問したウェブページのコンテンツからも検索することができます。せっかく見つけたすばらしい記事がどこにあったか忘れてしまった経験はありますか ならタイトルとアドレスだけでなく、訪問\n&quot;
$1 = void

with child=0x81a42ac (html)

so !ancestor-&gt;parent() || (ancestor-&gt;hasLayer() &amp;&amp; ancestor-&gt;parent()-&gt;isRenderView()) should work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470155</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-20 10:31:06 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Alright I&apos;m just going to land my original patch. It seems like a too much trouble for me figure out how to call hasLayer/isRenderView properly.

Really it would be best if the code was tied to the special margin rules. I’m not sure what code triggers those rules. We can revisit this after you land your code.

Do you know where the margin rules come from? Is it code in RenderView?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470157</commentid>
    <comment_count>14</comment_count>
      <attachid>108022</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 10:33:07 -0700</bug_when>
    <thetext>Created attachment 108022
another attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470190</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 11:04:04 -0700</bug_when>
    <thetext>Hi Darin, could you review this patch again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470214</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 11:33:47 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; Alright I&apos;m just going to land my original patch. It seems like a too much trouble for me figure out how to call hasLayer/isRenderView properly.
&gt; 
&gt; Really it would be best if the code was tied to the special margin rules. I’m not sure what code triggers those rules. We can revisit this after you land your code.
&gt;
&gt; Do you know where the margin rules come from? Is it code in RenderView?

I don&apos;t know what you&apos;re referring here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470273</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-20 13:13:49 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #13)
&gt; &gt; Really it would be best if the code was tied to the special margin rules. I’m not sure what code triggers those rules. We can revisit this after you land your code.
&gt; &gt;
&gt; &gt; Do you know where the margin rules come from? Is it code in RenderView?
&gt; 
&gt; I don&apos;t know what you&apos;re referring here.

I thought you had said at some point that body and head handle margins differently from other elements. Reading back I can’t find the comment that says that. But clearly something makes the handling different. It would be best if this code was tied as closely as possible to that something. Maybe I am just misunderstanding though. It’s happened before!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470274</commentid>
    <comment_count>18</comment_count>
      <attachid>108022</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-20 13:14:31 -0700</bug_when>
    <thetext>Comment on attachment 108022
another attempt

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:4236
&gt; -    if (!ancestor || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())
&gt; +    if (!ancestor || !ancestor-&gt;parent() || (ancestor-&gt;hasLayer() &amp;&amp; ancestor-&gt;parent()-&gt;isRenderView())
&gt; +        || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())

Putting this condition in a named function might make clearer what it&apos;s doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470291</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 13:25:14 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 108022 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108022&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.cpp:4236
&gt; &gt; -    if (!ancestor || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())
&gt; &gt; +    if (!ancestor || !ancestor-&gt;parent() || (ancestor-&gt;hasLayer() &amp;&amp; ancestor-&gt;parent()-&gt;isRenderView())
&gt; &gt; +        || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())
&gt; 
&gt; Putting this condition in a named function might make clearer what it&apos;s doing.

Sure. Does shouldIgnoreEditability sound good to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470305</commentid>
    <comment_count>20</comment_count>
      <attachid>108022</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-20 13:48:27 -0700</bug_when>
    <thetext>Comment on attachment 108022
another attempt

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:4236
&gt;&gt;&gt; +        || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())
&gt;&gt; 
&gt;&gt; Putting this condition in a named function might make clearer what it&apos;s doing.
&gt; 
&gt; Sure. Does shouldIgnoreEditability sound good to you?

I was thinking more:

    if (!isEditabilityBoundary(ancestor, child))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470352</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 14:34:52 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 108022 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108022&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:4236
&gt; &gt;&gt;&gt; +        || ancestor-&gt;node()-&gt;rendererIsEditable() == childNode-&gt;rendererIsEditable())
&gt; &gt;&gt; 
&gt; &gt;&gt; Putting this condition in a named function might make clearer what it&apos;s doing.
&gt; &gt; 
&gt; &gt; Sure. Does shouldIgnoreEditability sound good to you?
&gt; 
&gt; I was thinking more:
&gt; 
&gt;     if (!isEditabilityBoundary(ancestor, child))

Will do that then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470402</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-20 15:32:44 -0700</bug_when>
    <thetext>Committed r95574: &lt;http://trac.webkit.org/changeset/95574&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>58951</attachid>
            <date>2010-06-16 18:40:53 -0700</date>
            <delta_ts>2010-06-16 18:40:53 -0700</delta_ts>
            <desc>test case</desc>
            <filename>scratch.html</filename>
            <type>text/html</type>
            <size>707</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">Q2xpY2tpbmcgaW4gdGhlIHJpZ2h0LWhhbGYgb2YgdGhlIGlmcmFtZSBzaG91bGQgcHV0IHRoZSBj
dXJzb3IgYXQgdGhlbiBlbmQgb2YgdGhlIGxpbmUgd2hlcmUgeW91IGNsaWNrLiBJbnN0ZWFkLCBp
dCBwdXRzIGl0IGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLjxicj4KPHNjcmlwdD4KZnVuY3Rpb24g
cG9wdWxhdGUoKSB7CiAgICB2YXIgaWZyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvbycp
OwogICAgdmFyIGJvZHkgPSBpZnIuY29udGVudERvY3VtZW50LmJvZHk7CiAgICBib2R5LmNvbnRl
bnRFZGl0YWJsZSA9IHRydWU7CiAgICBib2R5LnN0eWxlLndoaXRlU3BhY2UgPSAibm93cmFwIjsK
ICAgIHZhciBodG1sID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKICAg
ICAgICBodG1sICs9ICJUaGlzIGlzIGEgc2hvcnQgbGluZSBvZiB0ZXh0Ljxicj4iCiAgICB9Cgog
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgaSsrKSB7CiAgICAgICAgaHRtbCArPSAiVGhpcyBp
cyBhIGxvbmcgbGluZSBvZiB0ZXh0IHRoYXQgZG9lc24ndCB3cmFwLiBIZXJlIGlzIHNvbWUgbW9y
ZSB0ZXh0Ljxicj4iCiAgICB9CiAgICBib2R5LmlubmVySFRNTCA9IGh0bWw7CiAgICBib2R5LnNj
cm9sbExlZnQgPSAxMDAwMDA7Cn0KPC9zY3JpcHQ+ICAgIAo8aWZyYW1lIGlkPWZvbyBvbmxvYWQ9
InBvcHVsYXRlKCkiPjwvaWZyYW1lPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107943</attachid>
            <date>2011-09-19 16:42:26 -0700</date>
            <delta_ts>2011-09-20 10:33:03 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>bug-40753-20110919164225.patch</filename>
            <type>text/plain</type>
            <size>7372</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NDkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDktMTkgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSGl0IHRlc3Rpbmcgb24gbWFyZ2lu
cyBvZiBib2R5IGFuZCBoZWFkIGVsZW1lbnRzIGRvZXNuJ3QgcmVjdXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzUzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IHBv
c2l0aW9uRm9yUG9pbnRSZXNwZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMncyBjb21wYXJpbmcgdGhl
IGVkaXRhYmlsaXR5CisgICAgICAgIG9mIGhlYWQvYm9keSBhbmQgaHRtbCBlbGVtZW50cyB3aGVu
IGhpdCB0ZXN0aW5nIHdhcyBkb25lIGluc2lkZSBtYXJnaW5zIG9mIGhlYWQgYW5kIGJvZHkgZWxl
bWVudHMuCisKKyAgICAgICAgRml4ZWQgdGhlIGJ1ZyBieSBzcGVjaWFsLWNhc2luZyBodG1sIGVs
ZW1lbnQgc2luY2UgbWFyZ2lucyBvZiBoZWFkIGFuZCBib2R5IGVsZW1lbnRzIGFyZSBzcGVjaWFs
LgorCisgICAgICAgIFRlc3RzOiBlZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1ib2R5LW1hcmdp
bi5odG1sCisgICAgICAgICAgICAgICBlZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1oZWFkLW1h
cmdpbi5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyk6
CisKIDIwMTEtMDktMTkgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWZhY3RvciBIZWFwIGFsbG9jYXRpb24gbG9naWMgaW50byBzZXBhcmF0ZSBBbGxvY2F0aW9u
U3BhY2UgY2xhc3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAkocmV2aXNpb24gOTU0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjMyLDcgKzQyMzIsNyBAQCBzdGF0aWMgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRSCiAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3It
PnBhcmVudCgpOwogCiAgICAgLy8gSWYgd2UgY2FuJ3QgZmluZCBhbiBhbmNlc3RvciB0byBjaGVj
ayBlZGl0YWJpbGl0eSBvbiwgb3IgZWRpdGFiaWxpdHkgaXMgdW5jaGFuZ2VkLCB3ZSByZWN1ciBs
aWtlIG5vcm1hbAotICAgIGlmICghYW5jZXN0b3IgfHwgYW5jZXN0b3ItPm5vZGUoKS0+cmVuZGVy
ZXJJc0VkaXRhYmxlKCkgPT0gY2hpbGROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBp
ZiAoIWFuY2VzdG9yIHx8IGFuY2VzdG9yLT5ub2RlKCktPmhhc1RhZ05hbWUoaHRtbFRhZykgfHwg
YW5jZXN0b3ItPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgPT0gY2hpbGROb2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGNoaWxkLT5wb3NpdGlvbkZvclBvaW50
KHBvaW50SW5DaGlsZENvb3JkaW5hdGVzKTsKIAogICAgIC8vIE90aGVyd2lzZSByZXR1cm4gYmVm
b3JlIG9yIGFmdGVyIHRoZSBjaGlsZCwgZGVwZW5kaW5nIG9uIGlmIHRoZSBjbGljayB3YXMgdG8g
dGhlIGxvZ2ljYWwgbGVmdCBvciBsb2dpY2FsIHJpZ2h0IG9mIHRoZSBjaGlsZApJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gOTU0OTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAxMS0wOS0xOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KKworICAgICAgICBIaXQgdGVzdGluZyBvbiBtYXJnaW5zIG9mIGJvZHkgYW5kIGhlYWQg
ZWxlbWVudHMgZG9lc24ndCByZWN1cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDA3NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgdGVzdHMgdG8gY2xpY2sgb24gbWFyZ2lucyBvZiBoZWFkIGFuZCBi
b2R5IGVsZW1lbnRzLiBXZWJLaXQgc2hvdWxkIG5vdAorICAgICAgICAoYXR0ZW1wdCB0bykgcGxh
Y2UgdGhlIGNhcmV0IGFmdGVyIG9yIGJlZm9yZSBoZWFkIGFuZCBib2R5IGVsZW1lbnRzLgorCisg
ICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vY2xpY2stb24tYm9keS1tYXJnaW4tZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1ib2R5LW1h
cmdpbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1o
ZWFkLW1hcmdpbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0
aW9uL2NsaWNrLW9uLWhlYWQtbWFyZ2luLmh0bWw6IEFkZGVkLgorCiAyMDExLTA5LTE5ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1Y4XSBkb2N1bWVudC5hbGwg
Z2V0cyBjb25mdXNlZCBhYm91dCBpdHMgcHJvdG90eXBlIGNoYWluCkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1ib2R5LW1hcmdpbi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vY2xpY2stb24tYm9keS1t
YXJnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vY2xpY2stb24tYm9keS1tYXJnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQgQEAKK0NsaWNrIG9uIHRoZSByaWdodCBvZiB0aGlzIGxpbmUgb3V0c2lkZSB0
aGUgYmxhY2sgYm94LgorVGhlIGNhcmV0IHNob3VsZCBiZSBwbGFjZWQgb24gdGhlIHJpZ2h0IG9m
IHRoZSBmaXJzdCBsaW5lLCBOT1Qgb24gdGhlIHJpZ2h0IG9mIHRoaXMgbGluZS4KK1BBU1MKKwpJ
bmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vY2xpY2stb24tYm9keS1tYXJnaW4u
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9jbGljay1v
bi1ib2R5LW1hcmdpbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vY2xpY2stb24tYm9keS1tYXJnaW4uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5IHN0eWxlPSJ3aGl0ZS1zcGFj
ZTogbm93cmFwOyBtYXJnaW46MTAwcHg7IGJvcmRlcjogc29saWQgMXB4IGJsYWNrOyIgY29udGVu
dGVkaXRhYmxlPgorPHNwYW4gaWQ9ImZpcnN0TGluZSI+Q2xpY2sgb24gdGhlIHJpZ2h0IG9mIHRo
aXMgbGluZSBvdXRzaWRlIHRoZSBibGFjayBib3guPC9zcGFuPjxicj4KKzxzcGFuIGlkPSJsb25n
TGluZSI+VGhlIGNhcmV0IHNob3VsZCBiZSBwbGFjZWQgb24gdGhlIHJpZ2h0IG9mIHRoZSBmaXJz
dCBsaW5lLCBOT1Qgb24gdGhlIHJpZ2h0IG9mIHRoaXMgbGluZS4KKzxzcGFuPjwvc3Bhbj48L3Nw
YW4+Cis8cHJlPjxzY3JpcHQ+CisKK3ZhciBsb25nTGluZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdsb25nTGluZScpOword2hpbGUgKGxvbmdMaW5lLm9mZnNldFdpZHRoIDwgZG9jdW1lbnQu
Ym9keS5vZmZzZXRXaWR0aCArIDIwMCkKKyAgICBsb25nTGluZS5sYXN0Q2hpbGQudGV4dENvbnRl
bnQgKz0gJyBzb21lIHRleHQnOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgdmFyIGZpcnN0
TGluZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdExpbmUnKTsKKyAgICBldmVudFNl
bmRlci5tb3VzZU1vdmVUbyhmaXJzdExpbmUub2Zmc2V0TGVmdCArIGRvY3VtZW50LmJvZHkub2Zm
c2V0V2lkdGggKyAxMCwKKyAgICAgICAgZmlyc3RMaW5lLm9mZnNldFRvcCArIGZpcnN0TGluZS5v
ZmZzZXRIZWlnaHQgLyAyKTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVu
dFNlbmRlci5tb3VzZVVwKCk7CisKKyAgICBpZiAoIWdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2Vk
KQorICAgICAgICBkb2N1bWVudC53cml0ZWxuKCdGQUlMIC0gc2VsZWN0aW9uIHdhcyBub3QgY29s
bGFwc2VkJyk7CisgICAgZWxzZSBpZiAoZ2V0U2VsZWN0aW9uKCkuYmFzZU5vZGUgIT0gZmlyc3RM
aW5lLmZpcnN0Q2hpbGQpCisgICAgICAgIGRvY3VtZW50LndyaXRlbG4oJ0ZBSUwgLSBjYXJldCB3
YXMgbm90IGluIHRoZSBmaXJzdCBsaW5lJyk7CisgICAgZWxzZSBpZiAoZ2V0U2VsZWN0aW9uKCku
YmFzZU9mZnNldCAhPSBmaXJzdExpbmUudGV4dENvbnRlbnQubGVuZ3RoKQorICAgICAgICBkb2N1
bWVudC53cml0ZWxuKCdGQUlMIC0gY2FyZXQgd2FzIG5vdCBvbiB0aGUgcmlnaHQgZWRnZScpOwor
ICAgIGVsc2UKKyAgICAgICAgZG9jdW1lbnQud3JpdGVsbignUEFTUycpOworCisgICAgbG9uZ0xp
bmUubGFzdENoaWxkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Cit9CisKKzwvc2NyaXB0PjwvcHJl
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
Y2xpY2stb24taGVhZC1tYXJnaW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2NsaWNrLW9uLWhlYWQtbWFyZ2luLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2NsaWNrLW9uLWhl
YWQtbWFyZ2luLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitDbGlj
ayBvbiB0aGUgcmlnaHQgb2YgdGhpcyBsaW5lIG91dHNpZGUgdGhlIGJsYWNrIGJveC4KK1RoZSBj
YXJldCBzaG91bGQgYmUgcGxhY2VkIG9uIHRoZSByaWdodCBvZiB0aGUgZmlyc3QgbGluZSwgTk9U
IG9uIHRoZSByaWdodCBvZiB0aGlzIGxpbmUuCisgUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1oZWFkLW1hcmdpbi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2NsaWNrLW9uLWhlYWQtbWFyZ2luLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1o
ZWFkLW1hcmdpbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQgY29udGVudGVkaXRhYmxlIHN0eWxlPSJkaXNwbGF5OiBibG9j
azsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgbWFyZ2luOjEwMHB4OyBib3JkZXI6IHNvbGlkIDFweCBi
bGFjazsiPjwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZmlyc3RMaW5lIj5DbGljayBvbiB0aGUg
cmlnaHQgb2YgdGhpcyBsaW5lIG91dHNpZGUgdGhlIGJsYWNrIGJveC48L2Rpdj4KKzxzcGFuIGlk
PSJsb25nTGluZSI+VGhlIGNhcmV0IHNob3VsZCBiZSBwbGFjZWQgb24gdGhlIHJpZ2h0IG9mIHRo
ZSBmaXJzdCBsaW5lLCBOT1Qgb24gdGhlIHJpZ2h0IG9mIHRoaXMgbGluZS48c3Bhbj48L3NwYW4+
PC9zcGFuPgorPHByZT48c2NyaXB0PgorCit2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCdoZWFkJylbMF07Cit2YXIgbG9uZ0xpbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbG9uZ0xpbmUnKTsKK3ZhciBmaXJzdExpbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZmlyc3RMaW5lJyk7CisKKy8vIFdvcmstYXJvdW5kIEhUTUw1IHBhcnNlci4KK2hlYWQuYXBw
ZW5kQ2hpbGQoZmlyc3RMaW5lKTsKK2hlYWQuYXBwZW5kQ2hpbGQobG9uZ0xpbmUpOworCit3aGls
ZSAobG9uZ0xpbmUub2Zmc2V0V2lkdGggPCBoZWFkLm9mZnNldFdpZHRoICsgMjAwKQorICAgIGxv
bmdMaW5lLmxhc3RDaGlsZC50ZXh0Q29udGVudCArPSAnIHNvbWUgdGV4dCc7CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhmaXJzdExpbmUub2Zmc2V0
TGVmdCArIGhlYWQub2Zmc2V0V2lkdGggKyAxMCwKKyAgICAgICAgMTAwICsgZmlyc3RMaW5lLm9m
ZnNldEhlaWdodCAvIDIpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlVXAoKTsKKworICAgIGlmICghZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQp
CisgICAgICAgIGRvY3VtZW50LndyaXRlbG4oJ0ZBSUwgLSBzZWxlY3Rpb24gd2FzIG5vdCBjb2xs
YXBzZWQnKTsKKyAgICBlbHNlIGlmIChnZXRTZWxlY3Rpb24oKS5iYXNlTm9kZSAhPSBmaXJzdExp
bmUuZmlyc3RDaGlsZCkKKyAgICAgICAgZG9jdW1lbnQud3JpdGVsbignRkFJTCAtIGNhcmV0IHdh
cyBub3QgaW4gdGhlIGZpcnN0IGxpbmUnKTsKKyAgICBlbHNlIGlmIChnZXRTZWxlY3Rpb24oKS5i
YXNlT2Zmc2V0ICE9IGZpcnN0TGluZS50ZXh0Q29udGVudC5sZW5ndGgpCisgICAgICAgIGRvY3Vt
ZW50LndyaXRlbG4oJ0ZBSUwgLSBjYXJldCB3YXMgbm90IG9uIHRoZSByaWdodCBlZGdlJyk7Cisg
ICAgZWxzZQorICAgICAgICBkb2N1bWVudC53cml0ZWxuKCdQQVNTJyk7CisKKyAgICBsb25nTGlu
ZS5sYXN0Q2hpbGQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKK30KKworPC9zY3JpcHQ+PC9wcmU+
Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108022</attachid>
            <date>2011-09-20 10:33:07 -0700</date>
            <delta_ts>2011-09-20 13:48:27 -0700</delta_ts>
            <desc>another attempt</desc>
            <filename>bug-40753-20110920103306.patch</filename>
            <type>text/plain</type>
            <size>7404</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NTUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDktMjAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSGl0IHRlc3Rpbmcgb24gbWFyZ2lu
cyBvZiBib2R5IGFuZCBoZWFkIGVsZW1lbnRzIGRvZXNuJ3QgcmVjdXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzUzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IHBv
c2l0aW9uRm9yUG9pbnRSZXNwZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMncyBjb21wYXJpbmcgdGhl
IGVkaXRhYmlsaXR5CisgICAgICAgIG9mIGhlYWQvYm9keSBhbmQgaHRtbCBlbGVtZW50cyB3aGVu
IGhpdCB0ZXN0aW5nIHdhcyBkb25lIGluc2lkZSBtYXJnaW5zIG9mIGhlYWQgYW5kIGJvZHkgZWxl
bWVudHMuCisKKyAgICAgICAgRml4ZWQgdGhlIGJ1ZyBieSBzcGVjaWFsLWNhc2luZyBodG1sIGVs
ZW1lbnQgc2luY2UgbWFyZ2lucyBvZiBoZWFkIGFuZCBib2R5IGVsZW1lbnRzIGFyZSBzcGVjaWFs
LgorCisgICAgICAgIFRlc3RzOiBlZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1ib2R5LW1hcmdp
bi5odG1sCisgICAgICAgICAgICAgICBlZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1oZWFkLW1h
cmdpbi5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyk6
CisKIDIwMTEtMDktMjAgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5v
cmc+CiAKICAgICAgICAgW1F0XVtXSzJdIEFkZCBzdHVicyBmb3IgRlVMTFNDUkVFTl9BUEkgb24g
UXQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDk1NTUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIzMiw3ICs0MjMyLDggQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbkZvclBvaW50UgogICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQo
KTsKIAogICAgIC8vIElmIHdlIGNhbid0IGZpbmQgYW4gYW5jZXN0b3IgdG8gY2hlY2sgZWRpdGFi
aWxpdHkgb24sIG9yIGVkaXRhYmlsaXR5IGlzIHVuY2hhbmdlZCwgd2UgcmVjdXIgbGlrZSBub3Jt
YWwKLSAgICBpZiAoIWFuY2VzdG9yIHx8IGFuY2VzdG9yLT5ub2RlKCktPnJlbmRlcmVySXNFZGl0
YWJsZSgpID09IGNoaWxkTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFhbmNl
c3RvciB8fCAhYW5jZXN0b3ItPnBhcmVudCgpIHx8IChhbmNlc3Rvci0+aGFzTGF5ZXIoKSAmJiBh
bmNlc3Rvci0+cGFyZW50KCktPmlzUmVuZGVyVmlldygpKQorICAgICAgICB8fCBhbmNlc3Rvci0+
bm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSA9PSBjaGlsZE5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpKQogICAgICAgICByZXR1cm4gY2hpbGQtPnBvc2l0aW9uRm9yUG9pbnQocG9pbnRJbkNo
aWxkQ29vcmRpbmF0ZXMpOwogCiAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiBiZWZvcmUgb3IgYWZ0
ZXIgdGhlIGNoaWxkLCBkZXBlbmRpbmcgb24gaWYgdGhlIGNsaWNrIHdhcyB0byB0aGUgbG9naWNh
bCBsZWZ0IG9yIGxvZ2ljYWwgcmlnaHQgb2YgdGhlIGNoaWxkCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5
NTU1MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE4IEBACisyMDExLTA5LTIwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIEhpdCB0ZXN0aW5nIG9uIG1hcmdpbnMgb2YgYm9keSBhbmQgaGVhZCBlbGVtZW50cyBk
b2Vzbid0IHJlY3VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MDc1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCB0ZXN0cyB0byBjbGljayBvbiBtYXJnaW5zIG9mIGhlYWQgYW5kIGJvZHkgZWxlbWVu
dHMuIFdlYktpdCBzaG91bGQgbm90CisgICAgICAgIChhdHRlbXB0IHRvKSBwbGFjZSB0aGUgY2Fy
ZXQgYWZ0ZXIgb3IgYmVmb3JlIGhlYWQgYW5kIGJvZHkgZWxlbWVudHMuCisKKyAgICAgICAgKiBl
ZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1ib2R5LW1hcmdpbi1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2NsaWNrLW9uLWJvZHktbWFyZ2luLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2NsaWNrLW9uLWhlYWQtbWFyZ2lu
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vY2xpY2st
b24taGVhZC1tYXJnaW4uaHRtbDogQWRkZWQuCisKIDIwMTEtMDktMjAgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHI5NTUwOS4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2NsaWNr
LW9uLWJvZHktbWFyZ2luLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1ib2R5LW1hcmdpbi1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1ib2R5LW1h
cmdpbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorQ2xpY2sgb24g
dGhlIHJpZ2h0IG9mIHRoaXMgbGluZSBvdXRzaWRlIHRoZSBibGFjayBib3guCitUaGUgY2FyZXQg
c2hvdWxkIGJlIHBsYWNlZCBvbiB0aGUgcmlnaHQgb2YgdGhlIGZpcnN0IGxpbmUsIE5PVCBvbiB0
aGUgcmlnaHQgb2YgdGhpcyBsaW5lLgorUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9jbGljay1vbi1ib2R5LW1hcmdpbi5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2NsaWNrLW9uLWJvZHktbWFyZ2luLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1ib2R5LW1h
cmdpbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGJvZHkgc3R5bGU9IndoaXRlLXNwYWNlOiBub3dyYXA7IG1hcmdpbjoxMDBweDsg
Ym9yZGVyOiBzb2xpZCAxcHggYmxhY2s7IiBjb250ZW50ZWRpdGFibGU+Cis8c3BhbiBpZD0iZmly
c3RMaW5lIj5DbGljayBvbiB0aGUgcmlnaHQgb2YgdGhpcyBsaW5lIG91dHNpZGUgdGhlIGJsYWNr
IGJveC48L3NwYW4+PGJyPgorPHNwYW4gaWQ9ImxvbmdMaW5lIj5UaGUgY2FyZXQgc2hvdWxkIGJl
IHBsYWNlZCBvbiB0aGUgcmlnaHQgb2YgdGhlIGZpcnN0IGxpbmUsIE5PVCBvbiB0aGUgcmlnaHQg
b2YgdGhpcyBsaW5lLgorPHNwYW4+PC9zcGFuPjwvc3Bhbj4KKzxwcmU+PHNjcmlwdD4KKwordmFy
IGxvbmdMaW5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvbmdMaW5lJyk7Cit3aGlsZSAo
bG9uZ0xpbmUub2Zmc2V0V2lkdGggPCBkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoICsgMjAwKQor
ICAgIGxvbmdMaW5lLmxhc3RDaGlsZC50ZXh0Q29udGVudCArPSAnIHNvbWUgdGV4dCc7CisKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisKKyAgICB2YXIgZmlyc3RMaW5lID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2ZpcnN0TGluZScpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGZpcnN0TGlu
ZS5vZmZzZXRMZWZ0ICsgZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCArIDEwLAorICAgICAgICBm
aXJzdExpbmUub2Zmc2V0VG9wICsgZmlyc3RMaW5lLm9mZnNldEhlaWdodCAvIDIpOworICAgIGV2
ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKworICAg
IGlmICghZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpCisgICAgICAgIGRvY3VtZW50LndyaXRl
bG4oJ0ZBSUwgLSBzZWxlY3Rpb24gd2FzIG5vdCBjb2xsYXBzZWQnKTsKKyAgICBlbHNlIGlmIChn
ZXRTZWxlY3Rpb24oKS5iYXNlTm9kZSAhPSBmaXJzdExpbmUuZmlyc3RDaGlsZCkKKyAgICAgICAg
ZG9jdW1lbnQud3JpdGVsbignRkFJTCAtIGNhcmV0IHdhcyBub3QgaW4gdGhlIGZpcnN0IGxpbmUn
KTsKKyAgICBlbHNlIGlmIChnZXRTZWxlY3Rpb24oKS5iYXNlT2Zmc2V0ICE9IGZpcnN0TGluZS50
ZXh0Q29udGVudC5sZW5ndGgpCisgICAgICAgIGRvY3VtZW50LndyaXRlbG4oJ0ZBSUwgLSBjYXJl
dCB3YXMgbm90IG9uIHRoZSByaWdodCBlZGdlJyk7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVu
dC53cml0ZWxuKCdQQVNTJyk7CisKKyAgICBsb25nTGluZS5sYXN0Q2hpbGQuc3R5bGUuZGlzcGxh
eSA9ICdub25lJzsKK30KKworPC9zY3JpcHQ+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9jbGljay1vbi1oZWFkLW1hcmdpbi1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vY2xp
Y2stb24taGVhZC1tYXJnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vY2xpY2stb24taGVhZC1tYXJnaW4tZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK0NsaWNrIG9uIHRoZSByaWdodCBvZiB0aGlzIGxp
bmUgb3V0c2lkZSB0aGUgYmxhY2sgYm94LgorVGhlIGNhcmV0IHNob3VsZCBiZSBwbGFjZWQgb24g
dGhlIHJpZ2h0IG9mIHRoZSBmaXJzdCBsaW5lLCBOT1Qgb24gdGhlIHJpZ2h0IG9mIHRoaXMgbGlu
ZS4KKyBQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2NsaWNrLW9u
LWhlYWQtbWFyZ2luLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxl
Y3Rpb24vY2xpY2stb24taGVhZC1tYXJnaW4uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2NsaWNrLW9uLWhlYWQtbWFyZ2luLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZCBjb250
ZW50ZWRpdGFibGUgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBt
YXJnaW46MTAwcHg7IGJvcmRlcjogc29saWQgMXB4IGJsYWNrOyI+PC9oZWFkPgorPGJvZHk+Cis8
ZGl2IGlkPSJmaXJzdExpbmUiPkNsaWNrIG9uIHRoZSByaWdodCBvZiB0aGlzIGxpbmUgb3V0c2lk
ZSB0aGUgYmxhY2sgYm94LjwvZGl2PgorPHNwYW4gaWQ9ImxvbmdMaW5lIj5UaGUgY2FyZXQgc2hv
dWxkIGJlIHBsYWNlZCBvbiB0aGUgcmlnaHQgb2YgdGhlIGZpcnN0IGxpbmUsIE5PVCBvbiB0aGUg
cmlnaHQgb2YgdGhpcyBsaW5lLjxzcGFuPjwvc3Bhbj48L3NwYW4+Cis8cHJlPjxzY3JpcHQ+CisK
K3ZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTsKK3Zh
ciBsb25nTGluZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb25nTGluZScpOwordmFyIGZp
cnN0TGluZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdExpbmUnKTsKKworLy8gV29y
ay1hcm91bmQgSFRNTDUgcGFyc2VyLgoraGVhZC5hcHBlbmRDaGlsZChmaXJzdExpbmUpOworaGVh
ZC5hcHBlbmRDaGlsZChsb25nTGluZSk7CisKK3doaWxlIChsb25nTGluZS5vZmZzZXRXaWR0aCA8
IGhlYWQub2Zmc2V0V2lkdGggKyAyMDApCisgICAgbG9uZ0xpbmUubGFzdENoaWxkLnRleHRDb250
ZW50ICs9ICcgc29tZSB0ZXh0JzsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlTW92ZVRvKGZpcnN0TGluZS5vZmZzZXRMZWZ0ICsgaGVhZC5vZmZzZXRXaWR0aCAr
IDEwLAorICAgICAgICAxMDAgKyBmaXJzdExpbmUub2Zmc2V0SGVpZ2h0IC8gMik7CisgICAgZXZl
bnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworCisgICAg
aWYgKCFnZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkKKyAgICAgICAgZG9jdW1lbnQud3JpdGVs
bignRkFJTCAtIHNlbGVjdGlvbiB3YXMgbm90IGNvbGxhcHNlZCcpOworICAgIGVsc2UgaWYgKGdl
dFNlbGVjdGlvbigpLmJhc2VOb2RlICE9IGZpcnN0TGluZS5maXJzdENoaWxkKQorICAgICAgICBk
b2N1bWVudC53cml0ZWxuKCdGQUlMIC0gY2FyZXQgd2FzIG5vdCBpbiB0aGUgZmlyc3QgbGluZScp
OworICAgIGVsc2UgaWYgKGdldFNlbGVjdGlvbigpLmJhc2VPZmZzZXQgIT0gZmlyc3RMaW5lLnRl
eHRDb250ZW50Lmxlbmd0aCkKKyAgICAgICAgZG9jdW1lbnQud3JpdGVsbignRkFJTCAtIGNhcmV0
IHdhcyBub3Qgb24gdGhlIHJpZ2h0IGVkZ2UnKTsKKyAgICBlbHNlCisgICAgICAgIGRvY3VtZW50
LndyaXRlbG4oJ1BBU1MnKTsKKworICAgIGxvbmdMaW5lLmxhc3RDaGlsZC5zdHlsZS5kaXNwbGF5
ID0gJ25vbmUnOworfQorCis8L3NjcmlwdD48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="104880"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>