<?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>136055</bug_id>
          
          <creation_ts>2014-08-18 17:53:18 -0700</creation_ts>
          <short_desc>DFG::freezeFragile should register the frozen value&apos;s structure</short_desc>
          <delta_ts>2015-07-01 18:31:56 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>133426</dependson>
    
    <dependson>135750</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1029925</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-18 17:53:18 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105888</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-30 16:33:13 -0700</bug_when>
    <thetext>I believe that we previously did not do this because of the suspicion that it might be worthwhile to sometimes track a value without tracking its structure.  But right now all users of freeze() will eventually register the value&apos;s structure, except in cases where they obviously should but they obviously don&apos;t.  That causes bugs.  It would be easier to just make freeze() always register the structure and then not have any doubts about whose responsibility it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105889</commentid>
    <comment_count>2</comment_count>
      <attachid>255873</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-30 16:36:54 -0700</bug_when>
    <thetext>Created attachment 255873
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106111</commentid>
    <comment_count>3</comment_count>
      <attachid>255873</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-07-01 10:51:24 -0700</bug_when>
    <thetext>Comment on attachment 255873
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106115</commentid>
    <comment_count>4</comment_count>
      <attachid>255873</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-07-01 11:11:02 -0700</bug_when>
    <thetext>Comment on attachment 255873
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGStructureRegistrationPhase.cpp:55
&gt;          for (FrozenValue* value : m_graph.m_frozenValues)
&gt; -            registerStructure(value-&gt;structure());
&gt; +            m_graph.assertIsRegistered(value-&gt;structure());

According to Graph::freezeFragile() and FrozenValue::freeze(), we can freeze non-cell values.  In those cases, value-&gt;structure() is a nullptr.  Is this assertion valid without a nullcheck on value-&gt;structure() first?  In Graph::assertIsRegistered(), it looks like it will deref the passed in structure without any checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106119</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-01 11:21:40 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 255873 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=255873&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGStructureRegistrationPhase.cpp:55
&gt; &gt;          for (FrozenValue* value : m_graph.m_frozenValues)
&gt; &gt; -            registerStructure(value-&gt;structure());
&gt; &gt; +            m_graph.assertIsRegistered(value-&gt;structure());
&gt; 
&gt; According to Graph::freezeFragile() and FrozenValue::freeze(), we can freeze
&gt; non-cell values.  In those cases, value-&gt;structure() is a nullptr.  Is this
&gt; assertion valid without a nullcheck on value-&gt;structure() first?  In
&gt; Graph::assertIsRegistered(), it looks like it will deref the passed in
&gt; structure without any checks.

Wow, good catch!  It turns out that this works because assertIsRegistered() returns early before the end of the structure registration phase.  So this is just a broken no-op!  I&apos;ll fix and post a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106274</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-01 18:08:43 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Comment on attachment 255873 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=255873&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGStructureRegistrationPhase.cpp:55
&gt; &gt; &gt;          for (FrozenValue* value : m_graph.m_frozenValues)
&gt; &gt; &gt; -            registerStructure(value-&gt;structure());
&gt; &gt; &gt; +            m_graph.assertIsRegistered(value-&gt;structure());
&gt; &gt; 
&gt; &gt; According to Graph::freezeFragile() and FrozenValue::freeze(), we can freeze
&gt; &gt; non-cell values.  In those cases, value-&gt;structure() is a nullptr.  Is this
&gt; &gt; assertion valid without a nullcheck on value-&gt;structure() first?  In
&gt; &gt; Graph::assertIsRegistered(), it looks like it will deref the passed in
&gt; &gt; structure without any checks.
&gt; 
&gt; Wow, good catch!  It turns out that this works because assertIsRegistered()
&gt; returns early before the end of the structure registration phase.  So this
&gt; is just a broken no-op!  I&apos;ll fix and post a new patch.

And this revealed a bug.  freezeFragile() was loading the structure and registering it, but then the act of freezing would load the structure a second time.  That was racy.  The fix is to load the structure only once.

Posting new patch now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106275</commentid>
    <comment_count>7</comment_count>
      <attachid>255979</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-01 18:09:06 -0700</bug_when>
    <thetext>Created attachment 255979
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106276</commentid>
    <comment_count>8</comment_count>
      <attachid>255979</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-07-01 18:23:42 -0700</bug_when>
    <thetext>Comment on attachment 255979
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106279</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-01 18:31:56 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/186215</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255873</attachid>
            <date>2015-06-30 16:36:54 -0700</date>
            <delta_ts>2015-07-01 18:09:06 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>4218</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg2MTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBA
CisyMDE1LTA2LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHOjpmcmVlemVGcmFnaWxlIHNob3VsZCByZWdpc3RlciB0aGUgZnJvemVuIHZhbHVlJ3Mgc3Ry
dWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzYwNTUKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjEwNDIxMjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4ZXMgd2VpcmQg
Y29uY3VycmVuY3kgYnVncyB3aGVyZSB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSB0cmllcyB0
byBjb252ZXJ0CisgICAgICAgIHNvbWV0aGluZyB0byBhIGNvbnN0YW50IGJ1dCB0aGVuIGNyYXNo
ZXMgYmVjYXVzZSB0aGUgY29uc3RhbnQncyBzdHJ1Y3R1cmUgd2Fzbid0CisgICAgICAgIHJlZ2lz
dGVyZWQuIFRoZSBBSSB3YXMgcmVnaXN0ZXJpbmcgdGhlIHN0cnVjdHVyZSBvZiBhbnkgdmFsdWUg
aXQgc2F3LCBidXQgY29uc3RhbnQgZm9sZGluZworICAgICAgICB3YXNuJ3QgLSBhbmQgdGhhdCdz
IGZpbmUgc28gbG9uZyBhcyB0aGVyZSBhaW4ndCBubyBjb25jdXJyZW5jeS4KKyAgICAgICAgCisg
ICAgICAgIFRoZSBiZXN0IGZpeCBpcyB0byBqdXN0IG1ha2UgaXQgaW1wb3NzaWJsZSB0byBpbnRy
b2R1Y2UgYSBjb25zdGFudCBpbnRvIHRoZSBJUiB3aXRob3V0CisgICAgICAgIHJlZ2lzdGVyaW5n
IGl0cyBzdHJ1Y3R1cmUuIFRoYXQncyB3aGF0IHRoaXMgY2hhbmdlIGRvZXMuIFRoaXMgaXMgbm90
IG9ubHkgYSBncmVhdAorICAgICAgICBjb25jdXJyZW5jeSBmaXggLSBpdCBhbHNvIG1ha2VzIHRo
ZSBjb21waWxlciBzb21ld2hhdCBlYXNpZXIgdG8gaGFjayBvbiBiZWNhdXNlIGl0J3Mgb25lCisg
ICAgICAgIGxlc3MgY2FzZSBvZiBzdHJ1Y3R1cmUgcmVnaXN0ZXJpbmcgdGhhdCB5b3UgaGF2ZSB0
byByZW1lbWJlciBhYm91dC4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRPU1JFbnRyeVZhbHVlKTogTm8g
bmVlZCB0byByZWdpc3Rlci4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXQp
OiBXZSBzdGlsbCBjYWxsIHJlZ2lzdGVyLCBidXQganVzdCB0byBnZXQgdGhlIHdhdGNocG9pbnQg
c3RhdGUuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZnJlZXplRnJhZ2lsZSk6IFJlZ2lzdGVyIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICog
ZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZTo6cnVuKTogQXNzZXJ0IHRoYXQgdGhlc2UgYXJl
IGFsbCByZWdpc3RlcmVkLgorCiAyMDE1LTA2LTMwICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9j
bGVtZW50QGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBvYmplY3QgYWxsb2NhdGlvbiBzaW5r
aW5nIHRocm91Z2ggR2V0U2NvcGUsIEdldEV4ZWN1dGFibGUgYW5kIFNraXBTY29wZSBub2RlcwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CShyZXZpc2lvbiAxODYxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHZvaWQgQWJzdHJh
Y3RWYWx1ZTo6c2V0T1NSRW50cnlWYWx1ZShHcmEKIHsKICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1
ZS52YWx1ZSgpLmlzQ2VsbCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFs
dWUuc3RydWN0dXJlKCk7Ci0gICAgICAgIGdyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVy
ZSk7CiAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9k
ZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgfSBlbHNl
IHsKQEAgLTcwLDkgKzY5LDYgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBo
LCBjbwogewogICAgIGlmICghIXZhbHVlICYmIHZhbHVlLnZhbHVlKCkuaXNDZWxsKCkpIHsKICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5zdHJ1Y3R1cmUoKTsKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY2hlY2sgbWF5IG5vdCBiZSBuZWNlc3Nhcnkgc2luY2UgYW55IGZyb3pl
biB2YWx1ZSBzaG91bGQgaGF2ZSBpdHMgc3RydWN0dXJlCi0gICAgICAgIC8vIHdhdGNoZWQgYWxy
ZWFkeS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNjA1NQogICAgICAgICBpZiAoZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKSA9
PSBTdHJ1Y3R1cmVSZWdpc3RlcmVkQW5kV2F0Y2hlZCkgewogICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgICAgICBpZiAoY2xvYmJlclN0YXRlID09IFN0cnVjdHVy
ZXNBcmVDbG9iYmVyZWQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCShyZXZpc2lvbiAxODYxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxNCw2ICsxMjE0LDkgQEAgRnJvemVuVmFsdWUq
IEdyYXBoOjpmcmVlemVGcmFnaWxlKEpTVmFsdQogICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQog
ICAgICAgICBtX3VpbnQzMlZhbHVlc0luVXNlLmFwcGVuZCh2YWx1ZS5hc1VJbnQzMigpKTsKICAg
ICAKKyAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmVnaXN0ZXJT
dHJ1Y3R1cmUodmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKKyAgICAKICAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1fZnJvemVuVmFsdWVzLmFkZChGcm96ZW5WYWx1ZTo6
ZnJlZXplKHZhbHVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxODYxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lz
dHJhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGgubV92bS5nZXR0ZXJTZXR0ZXJTdHJ1
Y3R1cmUuZ2V0KCkpOwogICAgICAgICAKICAgICAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUg
OiBtX2dyYXBoLm1fZnJvemVuVmFsdWVzKQotICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUo
dmFsdWUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG1fZ3JhcGguYXNzZXJ0SXNSZWdpc3Rl
cmVkKHZhbHVlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
</data>
<flag name="review"
          id="280967"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255979</attachid>
            <date>2015-07-01 18:09:06 -0700</date>
            <delta_ts>2015-07-01 18:23:42 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>5595</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg2MTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBA
CisyMDE1LTA2LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHOjpmcmVlemVGcmFnaWxlIHNob3VsZCByZWdpc3RlciB0aGUgZnJvemVuIHZhbHVlJ3Mgc3Ry
dWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzYwNTUKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjEwNDIxMjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4ZXMgd2VpcmQg
Y29uY3VycmVuY3kgYnVncyB3aGVyZSB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSB0cmllcyB0
byBjb252ZXJ0CisgICAgICAgIHNvbWV0aGluZyB0byBhIGNvbnN0YW50IGJ1dCB0aGVuIGNyYXNo
ZXMgYmVjYXVzZSB0aGUgY29uc3RhbnQncyBzdHJ1Y3R1cmUgd2Fzbid0CisgICAgICAgIHJlZ2lz
dGVyZWQuIFRoZSBBSSB3YXMgcmVnaXN0ZXJpbmcgdGhlIHN0cnVjdHVyZSBvZiBhbnkgdmFsdWUg
aXQgc2F3LCBidXQgY29uc3RhbnQgZm9sZGluZworICAgICAgICB3YXNuJ3QgLSBhbmQgdGhhdCdz
IGZpbmUgc28gbG9uZyBhcyB0aGVyZSBhaW4ndCBubyBjb25jdXJyZW5jeS4KKyAgICAgICAgCisg
ICAgICAgIFRoZSBiZXN0IGZpeCBpcyB0byBqdXN0IG1ha2UgaXQgaW1wb3NzaWJsZSB0byBpbnRy
b2R1Y2UgYSBjb25zdGFudCBpbnRvIHRoZSBJUiB3aXRob3V0CisgICAgICAgIHJlZ2lzdGVyaW5n
IGl0cyBzdHJ1Y3R1cmUuIFRoYXQncyB3aGF0IHRoaXMgY2hhbmdlIGRvZXMuIFRoaXMgaXMgbm90
IG9ubHkgYSBncmVhdAorICAgICAgICBjb25jdXJyZW5jeSBmaXggLSBpdCBhbHNvIG1ha2VzIHRo
ZSBjb21waWxlciBzb21ld2hhdCBlYXNpZXIgdG8gaGFjayBvbiBiZWNhdXNlIGl0J3Mgb25lCisg
ICAgICAgIGxlc3MgY2FzZSBvZiBzdHJ1Y3R1cmUgcmVnaXN0ZXJpbmcgdGhhdCB5b3UgaGF2ZSB0
byByZW1lbWJlciBhYm91dC4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRPU1JFbnRyeVZhbHVlKTogTm8g
bmVlZCB0byByZWdpc3Rlci4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXQp
OiBXZSBzdGlsbCBjYWxsIHJlZ2lzdGVyLCBidXQganVzdCB0byBnZXQgdGhlIHdhdGNocG9pbnQg
c3RhdGUuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZnJlZXplRnJhZ2lsZSk6IFJlZ2lzdGVyIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICog
ZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZTo6cnVuKTogQXNzZXJ0IHRoYXQgdGhlc2UgYXJl
IGFsbCByZWdpc3RlcmVkLgorCiAyMDE1LTA2LTMwICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9j
bGVtZW50QGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBvYmplY3QgYWxsb2NhdGlvbiBzaW5r
aW5nIHRocm91Z2ggR2V0U2NvcGUsIEdldEV4ZWN1dGFibGUgYW5kIFNraXBTY29wZSBub2RlcwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CShyZXZpc2lvbiAxODYxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHZvaWQgQWJzdHJh
Y3RWYWx1ZTo6c2V0T1NSRW50cnlWYWx1ZShHcmEKIHsKICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1
ZS52YWx1ZSgpLmlzQ2VsbCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFs
dWUuc3RydWN0dXJlKCk7Ci0gICAgICAgIGdyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVy
ZSk7CiAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9k
ZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgfSBlbHNl
IHsKQEAgLTcwLDkgKzY5LDYgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBo
LCBjbwogewogICAgIGlmICghIXZhbHVlICYmIHZhbHVlLnZhbHVlKCkuaXNDZWxsKCkpIHsKICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5zdHJ1Y3R1cmUoKTsKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY2hlY2sgbWF5IG5vdCBiZSBuZWNlc3Nhcnkgc2luY2UgYW55IGZyb3pl
biB2YWx1ZSBzaG91bGQgaGF2ZSBpdHMgc3RydWN0dXJlCi0gICAgICAgIC8vIHdhdGNoZWQgYWxy
ZWFkeS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNjA1NQogICAgICAgICBpZiAoZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKSA9
PSBTdHJ1Y3R1cmVSZWdpc3RlcmVkQW5kV2F0Y2hlZCkgewogICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgICAgICBpZiAoY2xvYmJlclN0YXRlID09IFN0cnVjdHVy
ZXNBcmVDbG9iYmVyZWQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCShyZXZpc2lvbiAxODYxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxNCw3ICsxMjE0LDExIEBAIEZyb3plblZhbHVl
KiBHcmFwaDo6ZnJlZXplRnJhZ2lsZShKU1ZhbHUKICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkK
ICAgICAgICAgbV91aW50MzJWYWx1ZXNJblVzZS5hcHBlbmQodmFsdWUuYXNVSW50MzIoKSk7CiAg
ICAgCi0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtX2Zyb3plblZhbHVlcy5h
ZGQoRnJvemVuVmFsdWU6OmZyZWV6ZSh2YWx1ZSkpOworICAgIEZyb3plblZhbHVlIGZyb3plblZh
bHVlID0gRnJvemVuVmFsdWU6OmZyZWV6ZSh2YWx1ZSk7CisgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZnJvemVuVmFsdWUuc3RydWN0dXJlKCkpCisgICAgICAgIHJlZ2lzdGVyU3RydWN0
dXJlKHN0cnVjdHVyZSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBtX2Zyb3plblZhbHVlcy5hZGQoZnJvemVuVmFsdWUpOwogfQogCiBGcm96ZW5WYWx1ZSogR3Jh
cGg6OmZyZWV6ZShKU1ZhbHVlIHZhbHVlKQpAQCAtMTI1OCw2ICsxMjYyLDEwIEBAIFN0cnVjdHVy
ZVJlZ2lzdHJhdGlvblJlc3VsdCBHcmFwaDo6cmVnaXMKIAogdm9pZCBHcmFwaDo6YXNzZXJ0SXNS
ZWdpc3RlcmVkKFN0cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIC8vIEl0J3MgY29udmVuaWVu
dCB0byBiZSBhYmxlIHRvIGNhbGwgdGhpcyB3aXRoIGEgbWF5YmUtbnVsbCBzdHJ1Y3R1cmUuCisg
ICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBpZiAobV9zdHJ1
Y3R1cmVSZWdpc3RyYXRpb25TdGF0ZSA9PSBIYXZlTm90U3RhcnRlZFJlZ2lzdGVyaW5nKQogICAg
ICAgICByZXR1cm47CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTg2MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCB0
aGlzIGJlZm9yZSB0aGlzIHBoYXNlIGZpbmlzaGVzLiBUaGlzIHBoYXNlIGRvZXNuJ3QgZG8gYW55
dGhpbmcKKyAgICAgICAgLy8gY29uZGl0aW9uZWQgb24gdGhpcyBmaWVsZCwgZXhjZXB0IGZvciBh
c3NlcnRJc1JlZ2lzdGVyZWQoKSBiZWxvdy4gV2UgaW50ZW5kIGZvciB0aGF0CisgICAgICAgIC8v
IG1ldGhvZCB0byBiZWhhdmUgYXMgaWYgdGhlIHBoYXNlIHdhcyBhbHJlYWR5IGZpbmlzaGVkLiBT
bywgd2Ugc2V0IHRoaXMgdXAgaGVyZS4KKyAgICAgICAgbV9ncmFwaC5tX3N0cnVjdHVyZVJlZ2lz
dHJhdGlvblN0YXRlID0gQWxsU3RydWN0dXJlc0FyZVJlZ2lzdGVyZWQ7CisgICAgICAgIAogICAg
ICAgICAvLyBUaGVzZSBhcmUgcHJldHR5IGR1bWIsIGJ1dCBuZWVkZWQgdG8gcGxhY2F0ZSBzdWJz
ZXF1ZW50IGFzc2VydGlvbnMuIFdlIGRvbid0IGFjdHVhbGx5CiAgICAgICAgIC8vIGhhdmUgdG8g
d2F0Y2ggdGhlc2UgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNpdGlvbiBhd2F5IGZy
b20gaXQsIGJ1dCB0aGV5IGFyZQogICAgICAgICAvLyB3YXRjaGFibGUgYW5kIHNvIHdlIHdpbGwg
YXNzZXJ0IGlmIHRoZXkgYXJlbid0IHdhdGNoZWQuCkBAIC01Miw3ICs1Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUobV9ncmFwaC5tX3ZtLmdldHRlclNldHRlclN0cnVj
dHVyZS5nZXQoKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEZyb3plblZhbHVlKiB2YWx1ZSA6
IG1fZ3JhcGgubV9mcm96ZW5WYWx1ZXMpCi0gICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh2
YWx1ZS0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgbV9ncmFwaC5hc3NlcnRJc1JlZ2lzdGVy
ZWQodmFsdWUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpA
QCAtMTQxLDggKzE0Niw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgbV9ncmFwaC5tX3N0cnVjdHVyZVJlZ2lzdHJhdGlvblN0YXRlID0gQWxs
U3RydWN0dXJlc0FyZVJlZ2lzdGVyZWQ7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAK
</data>
<flag name="review"
          id="281069"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>