<?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>106965</bug_id>
          
          <creation_ts>2013-01-15 17:58:18 -0800</creation_ts>
          <short_desc>NodeRareData doesn&apos;t need to have a vtable pointer</short_desc>
          <delta_ts>2013-01-24 11:27:30 -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>DOM</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>
          
          <blocked>106981</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>esprehn</cc>
    
    <cc>hausmann</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>loislo</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>807874</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-15 17:58:18 -0800</bug_when>
    <thetext>We have a vtable pointer in NodeRareData just so that its destructor and reportMemoryUsage can use them. That&apos;s silly because the only place wee delete NodeRareData is Node::clearRareData and we already explicitly calls delete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807885</commentid>
    <comment_count>1</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-15 18:09:59 -0800</bug_when>
    <thetext>I have a patch for this from a few months ago but it made the code a little confusing so I had decided against it. I can just upload it now though...

You can&apos;t just naively rely on us calling delete since deleting ElementRareData from a base class ptr with a non virtual destructor produces undefined behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807891</commentid>
    <comment_count>2</comment_count>
      <attachid>182891</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-15 18:20:03 -0800</bug_when>
    <thetext>Created attachment 182891
Removes the vtable pointer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807951</commentid>
    <comment_count>3</comment_count>
      <attachid>182891</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-15 19:24:51 -0800</bug_when>
    <thetext>Comment on attachment 182891
Removes the vtable pointer

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

Can we devirtualize createRareData() as well so people can&apos;t return subclasses anymore? There&apos;s no reason to support generic subclasses of rare data with virtual createRareData() since they wouldn&apos;t have their destructors handled properly.

&gt; Source/WebCore/dom/ElementRareData.cpp:39
&gt; +struct SameSizeAsElementRareData {

Why not just inherit NodeRareData ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807955</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-15 19:35:17 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 182891 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=182891&amp;action=review
&gt; 
&gt; Can we devirtualize createRareData() as well so people can&apos;t return subclasses anymore? There&apos;s no reason to support generic subclasses of rare data with virtual createRareData() since they wouldn&apos;t have their destructors handled properly.

Let&apos;s do that in a separate patch. There are few cleanups we can do there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808002</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-15 20:23:23 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/dom/ElementRareData.cpp:39
&gt; &gt; +struct SameSizeAsElementRareData {
&gt; 
&gt; Why not just inherit NodeRareData ?

That would defeat the purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808007</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-15 20:37:33 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; &gt; Source/WebCore/dom/ElementRareData.cpp:39
&gt; &gt; &gt; +struct SameSizeAsElementRareData {
&gt; &gt; 
&gt; &gt; Why not just inherit NodeRareData ?
&gt; 
&gt; That would defeat the purpose.

It&apos;s same thing since I&apos;m including NodeRareData as a member variable. I&apos;m simply ensuring that the size of NodeRareData is not zero, in which case sizeof(SameSizeAsElementRareData) &gt; sizeof(ElementRareData), among other things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808013</commentid>
    <comment_count>7</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-15 20:45:52 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; Source/WebCore/dom/ElementRareData.cpp:39
&gt; &gt; &gt; &gt; +struct SameSizeAsElementRareData {
&gt; &gt; &gt; 
&gt; &gt; &gt; Why not just inherit NodeRareData ?
&gt; &gt; 
&gt; &gt; That would defeat the purpose.
&gt; 
&gt; It&apos;s same thing since I&apos;m including NodeRareData as a member variable. I&apos;m simply ensuring that the size of NodeRareData is not zero, in which case sizeof(SameSizeAsElementRareData) &gt; sizeof(ElementRareData), among other things.

I don&apos;t understand this comment. Why would this make the struct bigger than the subclass? In general in WebCore we just inherit, ex. SameSizeAsRenderText, ShadowRoot, CSSRule, CSSRuleBase etc. I don&apos;t see anyone doing it like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808016</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-15 20:47:08 -0800</bug_when>
    <thetext>&gt; I don&apos;t understand this comment. Why would this make the struct bigger than the subclass? In general in WebCore we just inherit, ex. SameSizeAsRenderText, ShadowRoot, CSSRule, CSSRuleBase etc. I don&apos;t see anyone doing it like this.

I thought you were commenting on SameSizeAsNodeRareData. I should probably read the patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808020</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-15 20:48:43 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I don&apos;t understand this comment. Why would this make the struct bigger than the subclass? In general in WebCore we just inherit, ex. SameSizeAsRenderText, ShadowRoot, CSSRule, CSSRuleBase etc. I don&apos;t see anyone doing it like this.

struct A { };
struct B { A a; int b; }
struct C : A { int c; }

Then sizeof(B) &gt; sizeof(C) in most implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808023</commentid>
    <comment_count>10</comment_count>
      <attachid>182891</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-15 21:04:12 -0800</bug_when>
    <thetext>Comment on attachment 182891
Removes the vtable pointer

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

Looks good to me. I like both Elliott&apos;s ideas.

&gt; Source/WebCore/dom/ElementRareData.cpp:44
&gt; +    void* pointers[7];
&gt; +    LayoutSize sizeForResizing;

Please move sizeForResizing before pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808024</commentid>
    <comment_count>11</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-15 21:04:30 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; I don&apos;t understand this comment. Why would this make the struct bigger than the subclass? In general in WebCore we just inherit, ex. SameSizeAsRenderText, ShadowRoot, CSSRule, CSSRuleBase etc. I don&apos;t see anyone doing it like this.
&gt; 
&gt; struct A { };
&gt; struct B { A a; int b; }
&gt; struct C : A { int c; }
&gt; 
&gt; Then sizeof(B) &gt; sizeof(C) in most implementations.

Oh that&apos;s really fascinating! In this case sizeof(A) is actually 1 not 0. Thanks. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808026</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-15 21:09:38 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 182891 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=182891&amp;action=review
&gt; 
&gt; Looks good to me. I like both Elliott&apos;s ideas.
&gt; 
&gt; &gt; Source/WebCore/dom/ElementRareData.cpp:44
&gt; &gt; +    void* pointers[7];
&gt; &gt; +    LayoutSize sizeForResizing;
&gt; 
&gt; Please move sizeForResizing before pointers.

I&apos;m gonna move both non-pointer times to before pointers as we discussed in person.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808032</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-15 21:24:20 -0800</bug_when>
    <thetext>Committed r139833: &lt;http://trac.webkit.org/changeset/139833&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808058</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-01-15 22:37:17 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Committed r139833: &lt;http://trac.webkit.org/changeset/139833&gt;

It made all tests crash on GTK and on Qt:
- http://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release/builds/33025
- http://build.webkit.org/builders/Qt%20Linux%20Release/builds/56380

It seems they are GC related crashes. Could you check it please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808063</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-15 22:43:02 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Committed r139833: &lt;http://trac.webkit.org/changeset/139833&gt;
&gt; 
&gt; It made all tests crash on GTK and on Qt:
&gt; - http://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release/builds/33025
&gt; - http://build.webkit.org/builders/Qt%20Linux%20Release/builds/56380
&gt; 
&gt; It seems they are GC related crashes. Could you check it please?

Oops, sorry about that.This is strange maybe it doesn&apos;t like non-virtual destructor somehow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808067</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-15 22:50:29 -0800</bug_when>
    <thetext>Do you have a backtrace with symbols somewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808068</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-01-15 22:51:36 -0800</bug_when>
    <thetext>and Chromium too: http://build.webkit.org/builders/Chromium%20Mac%20Release%20%28Tests%29/builds/31809</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808070</commentid>
    <comment_count>18</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-01-15 22:52:10 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Do you have a backtrace with symbols somewhere?
I&apos;m on it. But unfortunately it doesn&apos;t occur in debug mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808071</commentid>
    <comment_count>19</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-15 22:53:51 -0800</bug_when>
    <thetext>Just a hunch: it looks like it is using libstd delete &amp;&amp; libc free instead of the FastAlloc delete and free.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808072</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-15 22:55:01 -0800</bug_when>
    <thetext>Fix attempted in http://trac.webkit.org/changeset/139838. The problem was that m_rareData is of type NodeRareDataBase even though it&apos;s an instance of NodeRareData so we have to explicitly cast it into NodeRareData before deleting it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808426</commentid>
    <comment_count>21</comment_count>
      <attachid>182891</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-16 09:20:36 -0800</bug_when>
    <thetext>Comment on attachment 182891
Removes the vtable pointer

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

&gt; Source/WebCore/dom/NodeRareData.h:309
&gt; +    // This member function is intentionially not virtual to avoid adding a vtable pointer.

Typo: intentionially</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815654</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-24 11:27:30 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 182891 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=182891&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/NodeRareData.h:309
&gt; &gt; +    // This member function is intentionially not virtual to avoid adding a vtable pointer.
&gt; 
&gt; Typo: intentionially

Oops, fixed in http://trac.webkit.org/changeset/140700.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182891</attachid>
            <date>2013-01-15 18:20:03 -0800</date>
            <delta_ts>2013-01-16 09:20:36 -0800</delta_ts>
            <desc>Removes the vtable pointer</desc>
            <filename>bug-106965-20130115181708.patch</filename>
            <type>text/plain</type>
            <size>6017</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTgxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEzLTAxLTE1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE5vZGVSYXJlRGF0YSBkb2Vzbid0
IG5lZWQgdG8gaGF2ZSBhIHZ0YWJsZSBwb2ludGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY5NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNYWRlIHRoZSBkZXN0cnVjdG9yIGFuZCByZXBvcnRNZW1v
cnlVc2FnZSBvZiBOb2RlUmFyZURhdGFCYXNlIGFuZCBOb2RlUmFyZURhdGEKKyAgICAgICAgcmVz
cGVjdGl2ZWx5IGFuZCB0aGVpciBzdWJjbGFzc2VzIG5vbi12aXJ0dWFsLgorCisgICAgICAgICog
ZG9tL0VsZW1lbnRSYXJlRGF0YS5jcHA6CisgICAgICAgIChTYW1lU2l6ZUFzRWxlbWVudFJhcmVE
YXRhKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKTogQWRkZWQgYSBjb21waWxlIGFzc2VydGlv
biBmb3IgdGhlIHNpemUgb2YgRWxlbWVudFJhcmVEYXRhLgorICAgICAgICAqIGRvbS9FbGVtZW50
UmFyZURhdGEuaDoKKyAgICAgICAgKEVsZW1lbnRSYXJlRGF0YSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJSYXJlRGF0YSk6IEV4cGxpY2l0
ZWx5IGRlbGV0ZSBOb2RlUmFyZURhdGEgb3IgRWxlbWVudFJhcmVEYXRhLgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOiBFeHBsaWNpdGVseSBhZGQgTm9kZVJhcmVE
YXRhIG9yIEVsZW1lbnRSYXJlRGF0YS4KKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAo
Tm9kZVJhcmVEYXRhQmFzZSk6IERlbGV0ZWQgdGhlIHZpcnR1YWwgZGVzdHJ1Y3Rvci4KKyAgICAg
ICAgKiBkb20vTm9kZVJhcmVEYXRhLmNwcDoKKyAgICAgICAgKFNhbWVTaXplQXNOb2RlUmFyZURh
dGEpOiBSZW1vdmVkIG9uZSBwb2ludGVyLgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoK
KyAgICAgICAgKE5vZGVSYXJlRGF0YSk6IFJlbW92ZWQgdGhlIHZpcnR1YWwgZGVzdHJ1Y3Rvci4K
KyAgICAgICAgKE5vZGVSYXJlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UpOiBNYWRlIG5vbi12aXJ0
dWFsLgorCiAyMDEzLTAxLTE1ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBHcm91cCBhbGwgcmVxdWVzdCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSB1c2VkIHRvIG1h
dGNoIENTUyBSdWxlcyBpbnRvIGEgcGFyYW1ldGVyIG9iamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50UmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50UmFyZURhdGEuY3BwCShyZXZpc2lvbiAxMzk3ODcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
MTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgU2FtZVNpemVBc0VsZW1lbnRS
YXJlRGF0YSB7CisgICAgTm9kZVJhcmVEYXRhIG5vZGVEYXRhOworICAgIHNob3J0IGluZGljZXNb
Ml07CisgICAgdW5zaWduZWQgYml0ZmllbGRzOworICAgIHZvaWQqIHBvaW50ZXJzWzddOworICAg
IExheW91dFNpemUgc2l6ZUZvclJlc2l6aW5nOworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0Owor
fTsKKworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVsZW1lbnRSYXJlRGF0YSkgPT0gc2l6ZW9mKFNh
bWVTaXplQXNFbGVtZW50UmFyZURhdGEpLCBFbGVtZW50UmFyZURhdGFTaG91bGRTdGF5U21hbGwp
OworCiB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5m
byhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiAxMzk3ODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRWxlbWVudFJhcmVEYXRhIDog
cHVibGljIE5vZGVSYXJlRGF0YSB7CiBwdWJsaWM6CiAgICAgRWxlbWVudFJhcmVEYXRhKCk7Ci0g
ICAgdmlydHVhbCB+RWxlbWVudFJhcmVEYXRhKCk7CisgICAgfkVsZW1lbnRSYXJlRGF0YSgpOwog
CiAgICAgdm9pZCBzZXRQc2V1ZG9FbGVtZW50KFBzZXVkb0lkLCBQYXNzUmVmUHRyPFBzZXVkb0Vs
ZW1lbnQ+KTsKICAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50KFBzZXVkb0lkKSBjb25z
dDsKQEAgLTk0LDcgKzk0LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNoaWxkSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2NoaWxkSW5kZXg7IH0KICAgICB2b2lkIHNldENoaWxkSW5kZXgodW5z
aWduZWQgaW5kZXgpIHsgbV9jaGlsZEluZGV4ID0gaW5kZXg7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJREU7Cisg
ICAgLy8gTWFudWFsbHkgY2FsbGVkIGJ5IE5vZGU6OnJlcG9ydE1lbW9yeVVzYWdlLgorICAgIHZv
aWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiAgICAgRWxl
bWVudFNoYWRvdyogc2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3cuZ2V0KCk7IH0KICAg
ICB2b2lkIHNldFNoYWRvdyhQYXNzT3duUHRyPEVsZW1lbnRTaGFkb3c+IHNoYWRvdykgeyBtX3No
YWRvdyA9IHNoYWRvdzsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTM5Nzg3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzEsNyAr
NDcxLDEwIEBAIHZvaWQgTm9kZTo6Y2xlYXJSYXJlRGF0YSgpCiAgICAgQVNTRVJUKCF0cmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSB8fCB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cnkoKS0+aXNFbXB0eSgpKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBt
X2RhdGEubV9yYXJlRGF0YS0+cmVuZGVyZXIoKTsKLSAgICBkZWxldGUgbV9kYXRhLm1fcmFyZURh
dGE7CisgICAgaWYgKGlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0
PEVsZW1lbnRSYXJlRGF0YSo+KG1fZGF0YS5tX3JhcmVEYXRhKTsKKyAgICBlbHNlCisgICAgICAg
IGRlbGV0ZSBtX2RhdGEubV9yYXJlRGF0YTsKICAgICBtX2RhdGEubV9yZW5kZXJlciA9IHJlbmRl
cmVyOwogICAgIGNsZWFyRmxhZyhIYXNSYXJlRGF0YUZsYWcpOwogfQpAQCAtMjU3OCw4ICsyNTgx
LDEyIEBAIHZvaWQgTm9kZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWMKICAgICBpbmZv
LmFkZE1lbWJlcihtX25leHQpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fcHJldmlvdXMpOwogICAg
IGluZm8uYWRkTWVtYmVyKHRoaXMtPnJlbmRlcmVyKCkpOwotICAgIGlmIChoYXNSYXJlRGF0YSgp
KQotICAgICAgICBpbmZvLmFkZE1lbWJlcihyYXJlRGF0YSgpKTsKKyAgICBpZiAoaGFzUmFyZURh
dGEoKSkgeworICAgICAgICBpZiAoaXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgaW5mby5h
ZGRNZW1iZXIoc3RhdGljX2Nhc3Q8RWxlbWVudFJhcmVEYXRhKj4ocmFyZURhdGEoKSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBpbmZvLmFkZE1lbWJlcihyYXJlRGF0YSgpKTsKKyAgICB9
CiB9CiAKIHZvaWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDEzOTc4NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw5ICsxMTUsOSBAQCBwdWJsaWM6CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KICAg
ICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9
IHJlbmRlcmVyOyB9CiAKLSAgICB2aXJ0dWFsIH5Ob2RlUmFyZURhdGFCYXNlKCkgeyB9CiBwcm90
ZWN0ZWQ6CiAgICAgTm9kZVJhcmVEYXRhQmFzZSgpIHsgfQorCiBwcml2YXRlOgogICAgIFJlbmRl
ck9iamVjdCogbV9yZW5kZXJlcjsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRh
LmNwcAkocmV2aXNpb24gMTM5Nzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RydWN0IFNhbWVTaXplQXNOb2RlUmFyZURhdGEgewotICAgIHZvaWQqIG1fcG9pbnRl
cls0XTsKKyAgICB2b2lkKiBtX3BvaW50ZXJbM107CiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKICAg
ICB2b2lkKiBtX21pY3JvRGF0YTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05v
ZGVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURh
dGEuaAkocmV2aXNpb24gMTM5Nzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsOSArMjgwLDYgQEAgcHVibGljOiAgICAKICAgICBO
b2RlUmFyZURhdGEoKQogICAgIHsgfQogCi0gICAgdmlydHVhbCB+Tm9kZVJhcmVEYXRhKCkKLSAg
ICB7IH0KLQogICAgIHZvaWQgY2xlYXJOb2RlTGlzdHMoKSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7
IH0KICAgICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9u
b2RlTGlzdHMuZ2V0KCk7IH0KICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZW5zdXJlTm9kZUxpc3Rz
KCkKQEAgLTMwOSw3ICszMDYsOCBAQCBwdWJsaWM6ICAgIAogICAgIH0KICNlbmRpZgogCi0gICAg
dmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsK
KyAgICAvLyBUaGlzIG1lbWJlciBmdW5jdGlvbiBpcyBpbnRlbnRpb25pYWxseSBub3QgdmlydHVh
bCB0byBhdm9pZCBhZGRpbmcgYSB2dGFibGUgcG9pbnRlci4KKyAgICB2b2lkIHJlcG9ydE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBPd25QdHI8
Tm9kZUxpc3RzTm9kZURhdGE+IG1fbm9kZUxpc3RzOwo=
</data>
<flag name="review"
          id="201058"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="201094"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>