<?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>145298</bug_id>
          
          <creation_ts>2015-05-21 23:09:11 -0700</creation_ts>
          <short_desc>Arguments elimination phase mishandles arity check failure in its reduction of LoadVarargs to GetStack/PutStacks</short_desc>
          <delta_ts>2015-05-22 11:48:48 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1096788</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-21 23:09:11 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096789</commentid>
    <comment_count>1</comment_count>
      <attachid>253578</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-21 23:11:12 -0700</bug_when>
    <thetext>Created attachment 253578
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096877</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-05-22 09:50:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/21030149&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096890</commentid>
    <comment_count>3</comment_count>
      <attachid>253578</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-05-22 10:57:35 -0700</bug_when>
    <thetext>Comment on attachment 253578
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:501
&gt; +                        DFG_ASSERT(m_graph, node, varargsData-&gt;limit - 1 &gt;= varargsData-&gt;mandatoryMinimum);
&gt; +                        unsigned limit = std::max(
&gt; +                            varargsData-&gt;limit - 1, varargsData-&gt;mandatoryMinimum);

Is the following true?
1. varargs-&gt;limit means varargs-&gt;numberOfArgsPassedByCallerIncludingThis.
2. varargs-&gt;mandatoryMinimum means varargs-&gt;numberOfArgsRequiredByCallee.

&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:510
&gt; +                            if (loadIndex + 1 &lt; inlineCallFrame-&gt;arguments.size()) {

From reading the code, I see that inlineCallFrame-&gt;arguments.size is set to be the argumentsCountIncludingThis of the callee function to be inlined in ByteCodeParser::InlineStackEntry::InlineStackEntry().  Hence, I expect its indexes to range from 0 (for this) to N for the Nth argument.  How is it that you compare it to loadIndex + 1 here where loadIndex can have a varargsData-&gt;offset adjustment which comes from the caller?  

I’m sure I’m reading something wrong.  Can you explain what I’m misinterpreting here please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096896</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-22 11:19:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 253578 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253578&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:501
&gt; &gt; +                        DFG_ASSERT(m_graph, node, varargsData-&gt;limit - 1 &gt;= varargsData-&gt;mandatoryMinimum);
&gt; &gt; +                        unsigned limit = std::max(
&gt; &gt; +                            varargsData-&gt;limit - 1, varargsData-&gt;mandatoryMinimum);
&gt; 
&gt; Is the following true?
&gt; 1. varargs-&gt;limit means varargs-&gt;numberOfArgsPassedByCallerIncludingThis.

No.

&gt; 2. varargs-&gt;mandatoryMinimum means varargs-&gt;numberOfArgsRequiredByCallee.

Yes.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:510
&gt; &gt; +                            if (loadIndex + 1 &lt; inlineCallFrame-&gt;arguments.size()) {
&gt; 
&gt; From reading the code, I see that inlineCallFrame-&gt;arguments.size is set to
&gt; be the argumentsCountIncludingThis of the callee function to be inlined in
&gt; ByteCodeParser::InlineStackEntry::InlineStackEntry().  Hence, I expect its
&gt; indexes to range from 0 (for this) to N for the Nth argument.  How is it
&gt; that you compare it to loadIndex + 1 here where loadIndex can have a
&gt; varargsData-&gt;offset adjustment which comes from the caller?  

This entire code is guarded by:

                    if (inlineCallFrame
                        &amp;&amp; !inlineCallFrame-&gt;isVarargs()
                        &amp;&amp; inlineCallFrame-&gt;arguments.size() - varargsData-&gt;offset &lt;= varargsData-&gt;limit) {

We use loadIndex + 1 because loadIndex is an argumentIndex rather than an argumentIndexIncludingThis.

&gt; 
&gt; I’m sure I’m reading something wrong.  Can you explain what I’m
&gt; misinterpreting here please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096897</commentid>
    <comment_count>5</comment_count>
      <attachid>253578</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-22 11:23:08 -0700</bug_when>
    <thetext>Comment on attachment 253578
the patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:501
&gt;&gt; +                            varargsData-&gt;limit - 1, varargsData-&gt;mandatoryMinimum);
&gt; 
&gt; Is the following true?
&gt; 1. varargs-&gt;limit means varargs-&gt;numberOfArgsPassedByCallerIncludingThis.
&gt; 2. varargs-&gt;mandatoryMinimum means varargs-&gt;numberOfArgsRequiredByCallee.

unsigned mandatoryMinimum; // The number of elements on the stack that must be initialized; if the array is too short then the missing elements must get undefined. Does not include &quot;this&quot;.
    unsigned limit; // Maximum number of elements to load. Includes &quot;this&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096898</commentid>
    <comment_count>6</comment_count>
      <attachid>253578</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-22 11:27:03 -0700</bug_when>
    <thetext>Comment on attachment 253578
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:521
&gt; +                                if (storeIndex &gt;= varargsData-&gt;mandatoryMinimum) {

I&apos;m curious: When does this case happen, and does it happen in the attached test case? If not, it&apos;s probably worth adding a test case for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096902</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-22 11:33:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 253578 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253578&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:521
&gt; &gt; +                                if (storeIndex &gt;= varargsData-&gt;mandatoryMinimum) {
&gt; 
&gt; I&apos;m curious: When does this case happen, and does it happen in the attached
&gt; test case? If not, it&apos;s probably worth adding a test case for this.

This will trigger it:

function foo() { // mandatoryMinimum = 0, since foo-&gt;numParameters() = 0
}

function bar() {
    foo.apply(this, arguments); // the arguments object here is statically known to have 3 entries, when we inline this into baz.  In this case, limit will be 4.
}

function baz() {
    bar(1, 2, 3);
}

I&apos;ll add a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096903</commentid>
    <comment_count>8</comment_count>
      <attachid>253578</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-22 11:33:19 -0700</bug_when>
    <thetext>Comment on attachment 253578
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:500
&gt; +                        DFG_ASSERT(m_graph, node, varargsData-&gt;limit - 1 &gt;= varargsData-&gt;mandatoryMinimum);
&gt; +                        unsigned limit = std::max(

I guess I shouldn&apos;t use max here, and just use limit - 1 directly, since the above is a release assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096908</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-22 11:48:48 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/184781</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253578</attachid>
            <date>2015-05-21 23:11:12 -0700</date>
            <delta_ts>2015-05-22 11:27:03 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>10682</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0NzUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBA
CisyMDE1LTA1LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJndW1lbnRzIGVsaW1pbmF0aW9uIHBoYXNlIG1pc2hhbmRsZXMgYXJpdHkgY2hlY2sgZmFpbHVy
ZSBpbiBpdHMgcmVkdWN0aW9uIG9mIExvYWRWYXJhcmdzIHRvIEdldFN0YWNrL1B1dFN0YWNrcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6IEZpeCB0aGUgYnVnLiBJIHJlc3RydWN0dXJl
ZCB0aGUgbG9vcCB0byBtYWtlIGl0IG1vcmUgb2J2aW91cyB0aGF0IHdlJ3JlIGluaXRpYWxpemlu
ZyBldmVyeXRoaW5nIHRoYXQgd2UncmUgc3VwcG9zZWQgdG8gaW5pdGlhbGl6ZS4KKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOiBBZGQgYSBjb21tZW50IHRvIGNsYXJpZnkgc29tZXRoaW5nIEkgd2Fz
IGNvbmZ1c2VkIGFib3V0IHdoaWxlIHdyaXRpbmcgdGhpcyBjb2RlLgorICAgICAgICAqIGRmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6IEhhY2tpbmcgb24gUHV0U3RhY2tzIG1hZGUgbWUg
dGhpbmsgZGVlcCB0aG91Z2h0cywgYW5kIEkgYWRkZWQgc29tZSBGSVhNRXMuCisgICAgICAgICog
dGVzdHMvc3RyZXNzL2ZvbGQtbG9hZC12YXJhcmdzLWFyaXR5LWNoZWNrLWZhaWwtYmFyZWx5Lmpz
OiBBZGRlZC4gVGhpcyB0ZXN0IGNyYXNoZXMgb3IgZmFpbHMgYmVmb3JlIHRoaXMgcGF0Y2guCisg
ICAgICAgICogdGVzdHMvc3RyZXNzL2ZvbGQtbG9hZC12YXJhcmdzLWFyaXR5LWNoZWNrLWZhaWwu
anM6IEFkZGVkLiBUaGlzIGlzIGV2ZW4gbW9yZSBzdXJlIHRvIGNyYXNoIG9yIGZhaWwuCisKIDIw
MTUtMDUtMjEgIFNhYW0gQmFyYXRpICA8c2FhbWJhcmF0aTFAZ21haWwuY29tPgogCiAgICAgICAg
IE9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2Ugc2hvdWxkIGV4cGxpY2l0bHkgY3JlYXRl
IGJvdHRvbSB2YWx1ZXMgZm9yIENyZWF0ZUFjdGl2YXRpb24gc2luayBjYW5kaWRhdGVzIGFuZCBD
cmVhdGVBY3RpdmF0aW9uIHNob3VsZCBoYXZlIFN5bWJvbFRhYmxlIGFzIGEgY2hpbGQgbm9kZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODQ3NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OTYsMjQgKzQ5Niw1MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0
YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVk
Z2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIHZhcmFyZ3NEYXRh
LT5vZmZzZXQ7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRKU1ZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3Jp
Z2luLCBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+
c3RhcnQgKyBpIC0gMSAtIHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0g
dmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbGltaXQgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJhcmdzRGF0YS0+bGltaXQgLSAxLCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB1bmRlZmluZWQgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsgc3RvcmVJbmRl
eCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBsb2FkLCBhbmQg
bG9hZCBpdCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxlLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJhcmdzRGF0YS0+b2Zmc2V0OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkSW5kZXggKyAx
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsg
MSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nl
c3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2lu
LCBPcEluZm8oZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgYW4gZWxlbWVu
dCB0aGF0IHdlIG11c3QgaW5pdGlhbGl6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0b3JlSW5kZXggPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90LiBXZSdyZSBkb25l
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBub2RlLT5vcmlnaW4sIGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgdGhh
dCB3ZSBoYXZlIGEgdmFsdWUsIHN0b3JlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJh
cmdzRGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4sIE9wSW5mbyhyZWcub2Zm
c2V0KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKHZhbHVlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLCBPcEluZm8o
ZGF0YSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnJlbW92ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDE4NDc1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgc3RydWN0IENhbGxWYXJh
cmdzRGF0YSB7CiB9OwogCiBzdHJ1Y3QgTG9hZFZhcmFyZ3NEYXRhIHsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3RhcnQ7IC8vIExvY2FsIGZvciB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3RhcnQ7IC8vIExvY2FsIGZvciB0aGUgZmlyc3QgZWxlbWVudC4gVGhpcyBpcyB0
aGUgZmlyc3QgYWN0dWFsIGFyZ3VtZW50LCBub3QgdGhpcy4KICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y291bnQ7IC8vIExvY2FsIGZvciB0aGUgY291bnQuCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hp
bmVTdGFydDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUNvdW50OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE4NDc1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0
U3RhY2tTaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIGFmdGVyIFNTQSBjb252ZXJzaW9uLCB3ZSBoYXZlIGFsbW9zdCBh
IGd1YXJhbnRlZSB0aGF0IHRoZSBQaGkgZ3JhcGggd2UgcHJvZHVjZSBoZXJlIHdvdWxkCiAgICAg
ICAgIC8vIGJlIHRyaXZpYWxseSByZWR1bmRhbnQgdG8gdGhlIG9uZSB3ZSBhbHJlYWR5IGhhdmUu
CiAgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBwaGFzZSBkb2Vzbid0IGFkZXF1YXRl
bHkgdXNlIEtpbGxTdGFja3MuIEtpbGxTdGFjayBjYW4gYmUgdmlld2VkIGFzIGEgZGVmLgorICAg
ICAgICAvLyBUaGlzIGlzIG1vc3RseSBpbmNvbnNlcXVlbnRpYWw7IGl0IHdvdWxkIGJlIGEgYnVn
IHRvIGhhdmUgYSBsb2NhbCBsaXZlIGF0IGEgS2lsbFN0YWNrLgorICAgICAgICAvLyBNb3JlIGlt
cG9ydGFudCBpcyB0aGF0IEtpbGxTdGFjayBzaG91bGQgc3dhbGxvdyBhbnkgZGVmZXJyYWwuIEFm
dGVyIGEgS2lsbFN0YWNrLCB0aGUKKyAgICAgICAgLy8gbG9jYWwgc2hvdWxkIGJlaGF2ZSBsaWtl
IGEgVE9QIGRlZmVycmFsIGJlY2F1c2UgaXQgd291bGQgYmUgaW52YWxpZCBmb3IgYW55b25lIHRv
IHRydXN0CisgICAgICAgIC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYgdGhp
cyBpcyBpbXBvcnRhbnQgb3Igbm90LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk2CisgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkg
ewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4i
KTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwpAQCAtMTA3LDYgKzExNCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWlnaHQgbWlzaGFuZGxlIExvYWRWYXJhcmdzIGFu
ZCBGb3J3YXJkVmFyYXJncy4gSXQgbWlnaHQgbWFrZSB1cworICAgICAgICAgICAgICAgICAgICAv
LyB0aGluayB0aGF0IHRoZSBsb2NhbHMgYmVpbmcgd3JpdHRlbiBhcmUgc3RhY2stbGl2ZSBoZXJl
LiBUaGV5IGFyZW4ndC4gVGhpcworICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgaGFy
bWxlc3Mgc2luY2Ugd2Ugb3ZlcndyaXRlIHRoZW0gYW55d2F5LCBidXQgc3RpbGwsIGl0J3Mgc2xv
cHB5LgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ1Mjk1CiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2Ji
ZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5k
bGVyLCBlc2NhcGVIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNlKSB7CkBAIC00ODMsNyArNDk0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5IGVsaW1pbmF0ZSB0aGUgc3Vua2VuIFB1dFN0
YWNrcyBieSB0dXJuaW5nIHRoZW0gaW50byBQaGFudG9tcy4gVGhpcyBrZWVwcyB3aGF0ZXZlcgor
ICAgICAgICAvLyBGaW5hbGx5IGVsaW1pbmF0ZSB0aGUgc3Vua2VuIFB1dFN0YWNrcyBieSB0dXJu
aW5nIHRoZW0gaW50byBDaGVja3MuIFRoaXMga2VlcHMgd2hhdGV2ZXIKICAgICAgICAgLy8gdHlw
ZSBjaGVjayB0aGV5IHdlcmUgZG9pbmcuIEFsc28gcHJlcGVuZCBLaWxsU3RhY2tzIHRvIHRoZW0g
dG8gZW5zdXJlIHRoYXQgd2Uga25vdyB0aGF0CiAgICAgICAgIC8vIHRoZSByZWxldmFudCB2YWx1
ZSB3YXMgKm5vdCogc3RvcmVkIHRvIHRoZSBzdGFjay4KICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLWxvYWQtdmFyYXJncy1hcml0eS1jaGVj
ay1mYWlsLWJhcmVseS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2ZvbGQtbG9hZC12YXJhcmdzLWFyaXR5LWNoZWNrLWZhaWwtYmFyZWx5LmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLWxv
YWQtdmFyYXJncy1hcml0eS1jaGVjay1mYWlsLWJhcmVseS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI4IEBACitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHJldHVybiBbYSwgYl07Cit9
CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4gZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7Cit9CisKK2Z1bmN0aW9uIGJheigpIHsKKyAgICByZXR1cm4gYmFyKDQyKTsKK30KKworbm9J
bmxpbmUoYmF6KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFy
IHJlc3VsdCA9IGJheigpOworICAgIGlmICghKHJlc3VsdCBpbnN0YW5jZW9mIEFycmF5KSkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiByZXN1bHQgaXMgbm90IGFuIGFycmF5LiI7CisgICAgaWYgKHJl
c3VsdC5sZW5ndGggIT0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiByZXN1bHQgZG9lc24ndCBo
YXZlIGxlbmd0aCA0LiI7CisgICAgaWYgKHJlc3VsdFswXSAhPSA0MikKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBmaXJzdCBlbGVtZW50IGlzIG5vdCA0MjogIiArIHJlc3VsdFswXTsKKyAgICBmb3Ig
KHZhciBqID0gMTsgaiA8IDI7ICsraikgeworICAgICAgICBpZiAocmVzdWx0W2pdICE9PSB2b2lk
IDApCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGVsZW1lbnQgIiArIGogKyAiIGlzIG5vdCB1
bmRlZmluZWQ6ICIgKyByZXN1bHRbal07CisgICAgfQorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2ZvbGQtbG9hZC12YXJhcmdzLWFyaXR5LWNoZWNrLWZhaWwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xk
LWxvYWQtdmFyYXJncy1hcml0eS1jaGVjay1mYWlsLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mb2xkLWxvYWQtdmFyYXJncy1hcml0eS1jaGVj
ay1mYWlsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKK2Z1bmN0aW9uIGZvbyhh
LCBiLCBjLCBkKSB7CisgICAgcmV0dXJuIFthLCBiLCBjLCBkXTsKK30KKworZnVuY3Rpb24gYmFy
KCkgeworICAgIHJldHVybiBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKK30KKworZnVuY3Rp
b24gYmF6KCkgeworICAgIHJldHVybiBiYXIoNDIpOworfQorCitub0lubGluZShiYXopOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmF6KCk7
CisgICAgaWYgKCEocmVzdWx0IGluc3RhbmNlb2YgQXJyYXkpKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IHJlc3VsdCBpcyBub3QgYW4gYXJyYXkuIjsKKyAgICBpZiAocmVzdWx0Lmxlbmd0aCAhPSA0
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IHJlc3VsdCBkb2Vzbid0IGhhdmUgbGVuZ3RoIDQuIjsK
KyAgICBpZiAocmVzdWx0WzBdICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGZpcnN0IGVs
ZW1lbnQgaXMgbm90IDQyOiAiICsgcmVzdWx0WzBdOworICAgIGZvciAodmFyIGogPSAxOyBqIDwg
NDsgKytqKSB7CisgICAgICAgIGlmIChyZXN1bHRbal0gIT09IHZvaWQgMCkKKyAgICAgICAgICAg
IHRocm93ICJFcnJvcjogZWxlbWVudCAiICsgaiArICIgaXMgbm90IHVuZGVmaW5lZDogIiArIHJl
c3VsdFtqXTsKKyAgICB9Cit9CisKKwo=
</data>
<flag name="review"
          id="278500"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>