<?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>105545</bug_id>
          
          <creation_ts>2012-12-20 09:35:15 -0800</creation_ts>
          <short_desc>RenderBlock and RenderBox hit testing should ignore PseudoElements</short_desc>
          <delta_ts>2012-12-20 16:16:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihnea Ovidenie">mihnea</reporter>
          <assigned_to name="Elliott Sprehn">esprehn</assigned_to>
          <cc>eric</cc>
    
    <cc>esprehn</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>koivisto</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>795496</commentid>
    <comment_count>0</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-12-20 09:35:15 -0800</bug_when>
    <thetext>The assertion was added in http://trac.webkit.org/changeset/137336 for WebKitBug https://bugs.webkit.org/show_bug.cgi?id=104462

Load the following HTML snippet in a debug version of WebKit on Mac:

&lt;!doctype html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;style&gt;
            #div1:before { display: inline-block; content: &quot;BBB&quot;; border: 1px solid red; }
            #div1 { border: 1px solid green; }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div id=&quot;div1&quot;&gt;AAAA&lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;

Click inside the red border of the :before element and you get:

ASSERTION FAILED: !m_anchorNode || !m_anchorNode-&gt;isPseudoElement()
/Users/mihnea/WebKit/Source/WebCore/dom/Position.cpp(90) : WebCore::Position::Position(PassRefPtr&lt;WebCore::Node&gt;, WebCore::Position::LegacyEditingOffset)
1   0x10686cdc9 WebCore::Position::Position(WTF::PassRefPtr&lt;WebCore::Node&gt;, WebCore::Position::LegacyEditingOffset)
2   0x10686cc8b WebCore::Position::Position(WTF::PassRefPtr&lt;WebCore::Node&gt;, WebCore::Position::LegacyEditingOffset)
3   0x105616a9e WebCore::createLegacyEditingPosition(WTF::PassRefPtr&lt;WebCore::Node&gt;, int)
4   0x1068c275d WebCore::RenderBlock::positionForBox(WebCore::InlineBox*, bool) const
5   0x1068c2f38 WebCore::RenderBlock::positionForPointWithInlineChildren(WebCore::LayoutPoint const&amp;)
6   0x1068c36b5 WebCore::RenderBlock::positionForPoint(WebCore::LayoutPoint const&amp;)
7   0x1068c32af WebCore::positionForPointRespectingEditingBoundaries(WebCore::RenderBlock*, WebCore::RenderBox*, WebCore::LayoutPoint const&amp;)
8   0x1068c302e WebCore::RenderBlock::positionForPointWithInlineChildren(WebCore::LayoutPoint const&amp;)
9   0x1068c36b5 WebCore::RenderBlock::positionForPoint(WebCore::LayoutPoint const&amp;)
10  0x105c71f9c WebCore::EventHandler::handleMousePressEventSingleClick(WebCore::MouseEventWithHitTestResults const&amp;)
11  0x105c7290b WebCore::EventHandler::handleMousePressEvent(WebCore::MouseEventWithHitTestResults const&amp;)
12  0x105c773c5 WebCore::EventHandler::handleMousePressEvent(WebCore::PlatformMouseEvent const&amp;)
13  0x103525e30 WebKit::handleMouseEvent(WebKit::WebMouseEvent const&amp;, WebKit::WebPage*, bool)
14  0x103525cf5 WebKit::WebPage::mouseEvent(WebKit::WebMouseEvent const&amp;)
15  0x103566a97 void CoreIPC::callMemberFunction&lt;WebKit::WebPage, void (WebKit::WebPage::*)(WebKit::WebMouseEvent const&amp;), WebKit::WebMouseEvent&gt;(CoreIPC::Arguments1&lt;WebKit::WebMouseEvent&gt; const&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(WebKit::WebMouseEvent const&amp;))
16  0x103559e65 void CoreIPC::handleMessage&lt;Messages::WebPage::MouseEvent, WebKit::WebPage, void (WebKit::WebPage::*)(WebKit::WebMouseEvent const&amp;)&gt;(CoreIPC::MessageDecoder&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(WebKit::WebMouseEvent const&amp;))
17  0x103554a62 WebKit::WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
18  0x103529abd WebKit::WebPage::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
19  0x103529b0d non-virtual thunk to WebKit::WebPage::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
20  0x10369ab8a CoreIPC::MessageReceiverMap::dispatchMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
21  0x1035ff179 WebKit::WebProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
22  0x1032fbc48 CoreIPC::Connection::dispatchMessage(CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
23  0x1032f910e CoreIPC::Connection::dispatchMessage(CoreIPC::Connection::Message&lt;CoreIPC::MessageDecoder&gt;&amp;)
24  0x1032fbbeb CoreIPC::Connection::dispatchOneMessage()
25  0x103303482 WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;::operator()(CoreIPC::Connection*)
26  0x103303405 WTF::BoundFunctionImpl&lt;WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;, void (CoreIPC::Connection*)&gt;::operator()()
27  0x106bc9529 WTF::Function&lt;void ()&gt;::operator()() const
28  0x106bc916f WebCore::RunLoop::performWork()
29  0x106bca67e WebCore::RunLoop::performWork(void*)
30  0x7fff886a0101 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
31  0x7fff8869fa25 __CFRunLoopDoSources0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795803</commentid>
    <comment_count>1</comment_count>
      <attachid>180411</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-20 14:28:14 -0800</bug_when>
    <thetext>Created attachment 180411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795807</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-20 14:31:55 -0800</bug_when>
    <thetext>I&apos;m curious what our behavior was prior to your grand patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795823</commentid>
    <comment_count>3</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-20 14:44:52 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I&apos;m curious what our behavior was prior to your grand patch?

Good question! With the old generated content impl node() would return null for generated content nodes since they were anonymous. I&apos;ve replicated that behavior with nonPseudoNode() which also returns null when the renderer is for a pseudo element.

This patch switches to use nonPseudoNode() bringing back the old behavior from before my patch where editing thinks pseudo element renderers have no associated node. I specifically added the assert to catch places where I may have missed us assuming generated content was anonymous... which Mihnea has exposed one of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795825</commentid>
    <comment_count>4</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-20 14:45:52 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; I&apos;m curious what our behavior was prior to your grand patch?
&gt; 
&gt; Good question! With the old generated content impl node() would return null for generated content nodes

_generated content renderers_, they didn&apos;t have their own node before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795839</commentid>
    <comment_count>5</comment_count>
      <attachid>180411</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-20 14:59:50 -0800</bug_when>
    <thetext>Comment on attachment 180411
Patch

In some of these we&apos;re just using nonPseudoNode as a bool instead of a pointer.  Is there a nicer function for htat?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795853</commentid>
    <comment_count>6</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-20 15:11:10 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 180411 [details])
&gt; In some of these we&apos;re just using nonPseudoNode as a bool instead of a pointer.  Is there a nicer function for htat?

Hmm, not that exists yet. You&apos;re asking the question: &quot;Is this renderer not anonymous AND also not a pseudo element&quot; which editing code just did if (renderer-&gt;node()) before.

We could have isAnonymousOrPseudoElement() { return isAnonymous() || isPseudoElement(); } if you think that&apos;s more clear. It seemed less error prone to make all editing code use nonPseudoNode() and not worry about having isAnonymousOrPseudoElement() checks all over.

I suppose we could rename nonPseudoNode to nodeForEditing() too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795909</commentid>
    <comment_count>7</comment_count>
      <attachid>180411</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-20 16:09:07 -0800</bug_when>
    <thetext>Comment on attachment 180411
Patch

This seems OK.  It&apos;s a bit unclear to me when to use nonPseudoNode and when to use node() however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795914</commentid>
    <comment_count>8</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-20 16:12:04 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 180411 [details])
&gt; This seems OK.  It&apos;s a bit unclear to me when to use nonPseudoNode and when to use node() however.

Hmm yeah. I&apos;ll rename it nodeForEditing() or something in a different patch to make it&apos;s uses more clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795923</commentid>
    <comment_count>9</comment_count>
      <attachid>180411</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 16:16:29 -0800</bug_when>
    <thetext>Comment on attachment 180411
Patch

Clearing flags on attachment: 180411

Committed r138317: &lt;http://trac.webkit.org/changeset/138317&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795924</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 16:16:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180411</attachid>
            <date>2012-12-20 14:28:14 -0800</date>
            <delta_ts>2012-12-20 16:16:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105545-20121220142530.patch</filename>
            <type>text/plain</type>
            <size>8489</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4Mjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmRkYTdiMjY1OWI1ZTEy
OTI0YmEzZTM2MzE1MmRiYzMzMTdjN2VlMy4uOGJjZjQ3MmMwZTdiMTExODFkZDdhODYwZjRjNGJj
NTg0MGNkMjQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTEyLTIwICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmRlckJsb2Nr
IGhpdCB0ZXN0aW5nIHNob3VsZCBpZ25vcmUgUHNldWRvRWxlbWVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTU0NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBub25Qc2V1ZG9Ob2RlKCkgaW4g
aGl0IHRlc3RpbmcgY29kZSBpbiBSZW5kZXJCbG9jayBhbmQgUmVuZGVyQm94IHNvCisgICAgICAg
IHRoYXQgd2hlbiBjbGlja2luZyBvbiB0aGUgYm94IGdlbmVyYXRlZCBieSBhIHBzZXVkbyBlbGVt
ZW50IHdlIG5ldmVyCisgICAgICAgIGdlbmVyYXRlIGEgUG9zaXRpb24gZm9yIHRoZSBQc2V1ZG9F
bGVtZW50LCBidXQgaW5zdGVhZCBmb3IgdGhlCisgICAgICAgIGdlbmVyYXRpbmcgbm9kZS4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9ibG9jay1hbmQtYm94LWhp
dC10ZXN0aW5nLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JCb3gpOgorICAgICAgICAo
V2ViQ29yZTo6aXNFZGl0aW5nQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25G
b3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBvc2l0aW9uRm9y
UG9pbnQpOgorCiAyMDEyLTEyLTIwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmVuYW1lIHNob3VsZEJ1ZmZlckRhdGEgdG8gZGF0YUJ1ZmZlcmluZ1BvbGlj
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggOGM0NTBmODBi
MDRlNGQzNWYxNTJhYTViODhjMzQ4YjMzMjIxNTEyNy4uOGU3NWI0MTk1YjQzNjFhMDkwMDBlYzk5
OWYzYjFkNWZhNmFjNzc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCkBAIC00OTM1LDIyICs0OTM1LDIyIEBAIFBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlv
bkZvckJveChJbmxpbmVCb3ggKmJveCwgYm9vbCBzdGFydCkgY29uc3QKICAgICBpZiAoIWJveCkK
ICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKLSAgICBpZiAoIWJveC0+cmVuZGVyZXIoKS0+
bm9kZSgpKQotICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUo
KSwgc3RhcnQgPyBjYXJldE1pbk9mZnNldCgpIDogY2FyZXRNYXhPZmZzZXQoKSk7CisgICAgaWYg
KCFib3gtPnJlbmRlcmVyKCktPm5vblBzZXVkb05vZGUoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub25Qc2V1ZG9Ob2RlKCksIHN0YXJ0ID8gY2FyZXRNaW5P
ZmZzZXQoKSA6IGNhcmV0TWF4T2Zmc2V0KCkpOwogCiAgICAgaWYgKCFib3gtPmlzSW5saW5lVGV4
dEJveCgpKQotICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGJveC0+
cmVuZGVyZXIoKS0+bm9kZSgpLCBzdGFydCA/IGJveC0+cmVuZGVyZXIoKS0+Y2FyZXRNaW5PZmZz
ZXQoKSA6IGJveC0+cmVuZGVyZXIoKS0+Y2FyZXRNYXhPZmZzZXQoKSk7CisgICAgICAgIHJldHVy
biBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYm94LT5yZW5kZXJlcigpLT5ub25Qc2V1ZG9O
b2RlKCksIHN0YXJ0ID8gYm94LT5yZW5kZXJlcigpLT5jYXJldE1pbk9mZnNldCgpIDogYm94LT5y
ZW5kZXJlcigpLT5jYXJldE1heE9mZnNldCgpKTsKIAogICAgIElubGluZVRleHRCb3gqIHRleHRC
b3ggPSB0b0lubGluZVRleHRCb3goYm94KTsKLSAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGJveC0+cmVuZGVyZXIoKS0+bm9kZSgpLCBzdGFydCA/IHRleHRCb3gtPnN0YXJ0
KCkgOiB0ZXh0Qm94LT5zdGFydCgpICsgdGV4dEJveC0+bGVuKCkpOworICAgIHJldHVybiBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYm94LT5yZW5kZXJlcigpLT5ub25Qc2V1ZG9Ob2RlKCks
IHN0YXJ0ID8gdGV4dEJveC0+c3RhcnQoKSA6IHRleHRCb3gtPnN0YXJ0KCkgKyB0ZXh0Qm94LT5s
ZW4oKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0VkaXRpbmdCb3VuZGFyeShSZW5kZXJP
YmplY3QqIGFuY2VzdG9yLCBSZW5kZXJPYmplY3QqIGNoaWxkKQogewotICAgIEFTU0VSVCghYW5j
ZXN0b3IgfHwgYW5jZXN0b3ItPm5vZGUoKSk7Ci0gICAgQVNTRVJUKGNoaWxkICYmIGNoaWxkLT5u
b2RlKCkpOworICAgIEFTU0VSVCghYW5jZXN0b3IgfHwgYW5jZXN0b3ItPm5vblBzZXVkb05vZGUo
KSk7CisgICAgQVNTRVJUKGNoaWxkICYmIGNoaWxkLT5ub25Qc2V1ZG9Ob2RlKCkpOwogICAgIHJl
dHVybiAhYW5jZXN0b3IgfHwgIWFuY2VzdG9yLT5wYXJlbnQoKSB8fCAoYW5jZXN0b3ItPmhhc0xh
eWVyKCkgJiYgYW5jZXN0b3ItPnBhcmVudCgpLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgfHwg
YW5jZXN0b3ItPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgPT0gY2hpbGQtPm5vZGUoKS0+
cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgICAgIHx8IGFuY2VzdG9yLT5ub25Qc2V1ZG9Ob2Rl
KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpID09IGNoaWxkLT5ub25Qc2V1ZG9Ob2RlKCktPnJlbmRl
cmVySXNFZGl0YWJsZSgpOwogfQogCiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgZ28g
b24gUmVuZGVyT2JqZWN0IGFzIGFuIGluc3RhbmNlIG1ldGhvZC4gVGhlbgpAQCAtNDk2NiwxNCAr
NDk2NiwxNCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRSZXNwZWN0
aW5nRWRpdGluZ0JvdW5kYXJpZXMoUmVuZGVyQmxvY2sqCiAgICAgTGF5b3V0UG9pbnQgcG9pbnRJ
bkNoaWxkQ29vcmRpbmF0ZXModG9MYXlvdXRQb2ludChwb2ludEluUGFyZW50Q29vcmRpbmF0ZXMg
LSBjaGlsZExvY2F0aW9uKSk7CiAKICAgICAvLyBJZiB0aGlzIGlzIGFuIGFub255bW91cyByZW5k
ZXJlciwgd2UganVzdCByZWN1ciBub3JtYWxseQotICAgIE5vZGUqIGNoaWxkTm9kZSA9IGNoaWxk
LT5ub2RlKCk7CisgICAgTm9kZSogY2hpbGROb2RlID0gY2hpbGQtPm5vblBzZXVkb05vZGUoKTsK
ICAgICBpZiAoIWNoaWxkTm9kZSkKICAgICAgICAgcmV0dXJuIGNoaWxkLT5wb3NpdGlvbkZvclBv
aW50KHBvaW50SW5DaGlsZENvb3JkaW5hdGVzKTsKIAogICAgIC8vIE90aGVyd2lzZSwgZmlyc3Qg
bWFrZSBzdXJlIHRoYXQgdGhlIGVkaXRhYmlsaXR5IG9mIHRoZSBwYXJlbnQgYW5kIGNoaWxkIGFn
cmVlLgogICAgIC8vIElmIHRoZXkgZG9uJ3QgYWdyZWUsIHRoZW4gd2UgcmV0dXJuIGEgdmlzaWJs
ZSBwb3NpdGlvbiBqdXN0IGJlZm9yZSBvciBhZnRlciB0aGUgY2hpbGQKICAgICBSZW5kZXJPYmpl
Y3QqIGFuY2VzdG9yID0gcGFyZW50OwotICAgIHdoaWxlIChhbmNlc3RvciAmJiAhYW5jZXN0b3It
Pm5vZGUoKSkKKyAgICB3aGlsZSAoYW5jZXN0b3IgJiYgIWFuY2VzdG9yLT5ub25Qc2V1ZG9Ob2Rl
KCkpCiAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpOwogCiAgICAgLy8gSWYg
d2UgY2FuJ3QgZmluZCBhbiBhbmNlc3RvciB0byBjaGVjayBlZGl0YWJpbGl0eSBvbiwgb3IgZWRp
dGFiaWxpdHkgaXMgdW5jaGFuZ2VkLCB3ZSByZWN1ciBsaWtlIG5vcm1hbApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA1ZTBmMGY3OWZlNGU1OTIwZDBkNzFkODk3NjM5
ZGJiNjEzOTA1MzZkLi45MmJjNTNiOGMyNTBiZTkxZDg3ZmVhNWIzZmM5NjkzYmE2N2NkYjBiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMzcxNSwxNiArMzcxNSwx
NiBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExh
eW91dFBvaW50JiBwb2ludCkKIHsKICAgICAvLyBubyBjaGlsZHJlbi4uLnJldHVybiB0aGlzIHJl
bmRlciBvYmplY3QncyBlbGVtZW50LCBpZiB0aGVyZSBpcyBvbmUsIGFuZCBvZmZzZXQgMAogICAg
IGlmICghZmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9u
KG5vZGUoKSA/IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKCkpIDogUG9zaXRpb24o
KSk7CisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obm9uUHNldWRvTm9kZSgp
ID8gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vblBzZXVkb05vZGUoKSkgOiBQb3NpdGlv
bigpKTsKIAotICAgIGlmIChpc1RhYmxlKCkgJiYgbm9kZSgpKSB7CisgICAgaWYgKGlzVGFibGUo
KSAmJiBub25Qc2V1ZG9Ob2RlKCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCByaWdodCA9IGNvbnRl
bnRXaWR0aCgpICsgYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQg
Ym90dG9tID0gY29udGVudEhlaWdodCgpICsgYm9yZGVyQW5kUGFkZGluZ0hlaWdodCgpOwogICAg
ICAgICAKICAgICAgICAgaWYgKHBvaW50LngoKSA8IDAgfHwgcG9pbnQueCgpID4gcmlnaHQgfHwg
cG9pbnQueSgpIDwgMCB8fCBwb2ludC55KCkgPiBib3R0b20pIHsKICAgICAgICAgICAgIGlmIChw
b2ludC54KCkgPD0gcmlnaHQgLyAyKQotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNp
YmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUoKSkpOwotICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJO
b2RlKG5vZGUoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRp
b24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vblBzZXVkb05vZGUoKSkpOworICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJO
b2RlKG5vblBzZXVkb05vZGUoKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNzkyLDcgKzM3
OTIsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0
IExheW91dFBvaW50JiBwb2ludCkKICAgICBpZiAoY2xvc2VzdFJlbmRlcmVyKQogICAgICAgICBy
ZXR1cm4gY2xvc2VzdFJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KGFkanVzdGVkUG9pbnQgLSBj
bG9zZXN0UmVuZGVyZXItPmxvY2F0aW9uT2Zmc2V0KCkpOwogICAgIAotICAgIHJldHVybiBjcmVh
dGVWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUoKSkpOwor
ICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKG5vblBzZXVkb05vZGUoKSkpOwogfQogCiBib29sIFJlbmRlckJveDo6c2hyaW5rVG9Bdm9p
ZEZsb2F0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjAzOTkzNDY3YTlkZTBjN2RlMTYyMzk3ZjY4MGZhNzk2
MDdiNTRkYS4uNzIyODZhOWZlZmFlMGY1Y2EyYmQ4NjY5NzJhYmU5ZWViYTYwZTRkZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDEyLTEyLTIwICBFbGxpb3R0IFNwcmVobiAgPGVzcHJlaG5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJlbmRlckJsb2NrIGhpdCB0ZXN0aW5nIHNob3VsZCBpZ25v
cmUgUHNldWRvRWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNTU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCB0ZXN0IGZvciBoaXQgdGVzdGluZyBvbiBwc2V1ZG8gZWxlbWVudCBnZW5l
cmF0ZWQgYmxvY2tzIGFuZCBib3hlcy4KKworICAgICAgICAqIGZhc3QvY3NzLWdlbmVyYXRlZC1j
b250ZW50L2Jsb2NrLWFuZC1ib3gtaGl0LXRlc3RpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9ibG9jay1hbmQtYm94LWhpdC10ZXN0
aW5nLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEyLTIwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVwZGF0ZSBNYWMgdGVzdCBleHBlY3RhdGlvbiBwZXIgYnVncyAx
MDU1NjYgYW5kIDEwNTU2Ny4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdlbmVy
YXRlZC1jb250ZW50L2Jsb2NrLWFuZC1ib3gtaGl0LXRlc3RpbmctZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9jc3MtZ2VuZXJhdGVkLWNvbnRlbnQvYmxvY2stYW5kLWJveC1oaXQtdGVz
dGluZy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmY0ZTkwNzhkNWMxZGY1YjE5Y2MzMTI2MzE4
NzFjOWQxODQzNjA2MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdl
bmVyYXRlZC1jb250ZW50L2Jsb2NrLWFuZC1ib3gtaGl0LXRlc3RpbmctZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEgQEAKK0J1ZyAxMDU1NDUgLSBSZW5kZXJCbG9jayBhbmQgUmVuZGVyQm94IGhpdCB0
ZXN0aW5nIHNob3VsZCBpZ25vcmUgUHNldWRvRWxlbWVudHMKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvY3NzLWdlbmVyYXRlZC1jb250ZW50L2Jsb2NrLWFuZC1ib3gtaGl0LXRlc3Rpbmcu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdlbmVyYXRlZC1jb250ZW50L2Jsb2NrLWFuZC1i
b3gtaGl0LXRlc3RpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NmUxYjliNmEwMGIyMGVhNzlhZTAyZjlm
YzkwNjc0MTBhMTNlNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mt
Z2VuZXJhdGVkLWNvbnRlbnQvYmxvY2stYW5kLWJveC1oaXQtdGVzdGluZy5odG1sCkBAIC0wLDAg
KzEsNDAgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8c3R5bGU+CisgICAgaHRtbCwgYm9keSB7Cisg
ICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgcGFkZGluZzogMDsKKyAgICAgICAgZm9udC1zaXpl
OiAxNHB4OworICAgIH0KKworICAgIGRpdjpiZWZvcmUgeworICAgICAgICBkaXNwbGF5OiBibG9j
azsKKyAgICAgICAgY29udGVudDogIkNsaWNraW5nIHRoZSByZWQgYm9yZGVyIHNob3VsZCBub3Qg
Y3Jhc2guIjsKKyAgICAgICAgYm9yZGVyOiA1cHggc29saWQgcmVkOworICAgIH0KKworICAgIGRp
djphZnRlciB7CisgICAgICAgIGRpc3BsYXk6IHRhYmxlOworICAgICAgICBjb250ZW50OiAiQ2xp
Y2tpbmcgdGhlIG1hcmdpbiBzaG91bGQgbm90IGNyYXNoLiI7CisgICAgICAgIG1hcmdpbjogMTBw
eDsKKyAgICAgICAgYmFja2dyb3VuZDogeWVsbG93OworICAgIH0KKzwvc3R5bGU+CisKKzxkaXY+
PC9kaXY+CisKKzxwPkJ1ZyAxMDU1NDUgLSBSZW5kZXJCbG9jayBhbmQgUmVuZGVyQm94IGhpdCB0
ZXN0aW5nIHNob3VsZCBpZ25vcmUgUHNldWRvRWxlbWVudHM8L3A+CisKKzxzY3JpcHQ+CitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2lmICh3
aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygwLCAwKTsK
KyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7
CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMCwgNDApOworICAgIGV2ZW50U2VuZGVyLm1v
dXNlRG93bigpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKzwvc2NyaXB0Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>