<?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>134869</bug_id>
          
          <creation_ts>2014-07-13 04:14:15 -0700</creation_ts>
          <short_desc>Document::unregisterNodeListforInvalidation() and Document::unregisterCollection() have incorrect assertions</short_desc>
          <delta_ts>2014-07-22 12:24:26 -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>New Bugs</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>130772</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1022107</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-07-13 04:14:15 -0700</bug_when>
    <thetext>Document::unregisterNodeListForInvalidation() incorrectly cooperates with Document::invalidateNodeListAndCollectionCaches()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022111</commentid>
    <comment_count>1</comment_count>
      <attachid>234829</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-07-13 04:45:14 -0700</bug_when>
    <thetext>Created attachment 234829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022119</commentid>
    <comment_count>2</comment_count>
      <attachid>234829</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-13 10:00:19 -0700</bug_when>
    <thetext>Comment on attachment 234829
Patch

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

&gt; Source/WebCore/dom/Document.cpp:3498
&gt; +    ASSERT(m_inInvalidateNodeListAndCollectionCaches &amp;&amp; !m_listsInvalidatedAtDocument.size()
&gt; +        || m_listsInvalidatedAtDocument.contains(&amp;list));
&gt; +    // There&apos;s no harm in removing an item that perhaps is not in the HashSet.
&gt; +    m_listsInvalidatedAtDocument.remove(&amp;list);

This looks OK, but I think it’s confusing. I would write this instead:

    ASSERT(m_inInvalidateNodeListAndCollectionCaches ? m_listsInvalidatedAtDocument.isEmpty() : m_listsInvalidatedAtDocument.contains(&amp;list));
    m_listsInvalidatedAtDocument.remove(&amp;list);

For some people the ?: might make it harder to read the assertion, but to me it makes it easier.

It also seems that unregisterCollection has the same bug. The two functions should be basically identical, but there are many arbitrary differences between which assertions they have and how the functions are structured.

Please fix the bug in unregisterCollection too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022120</commentid>
    <comment_count>3</comment_count>
      <attachid>234829</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-13 10:00:35 -0700</bug_when>
    <thetext>Comment on attachment 234829
Patch

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

&gt; Source/WebCore/ChangeLog:31
&gt; +        Adding move constructor and assignment operator for HashTable (r170995, rolled out in r170999)
&gt; +        revealed that Document::unregisterNodeListForInvalidation() contains incorrect assertions when
&gt; +        unregistering node lists for invalidations originating from
&gt; +        Document::invalidateNodeListAndCollectionCaches().
&gt; +
&gt; +        Once HashTable gained proper support for move semantics the WTF::move() call in
&gt; +        Document::invalidateNodeListAndCollectionCaches() left the m_listsInvalidatedAtDocument HashSet
&gt; +        empty, while previously it would remain intact and WTF::move() would perform a copy of the
&gt; +        underlying HashTable.
&gt; +
&gt; +        Previously Document::unregisterNodeListForInvalidation() would return early if that HashSet
&gt; +        member was empty, asserting that Document::invalidateNodeListAndCollectionCaches() was
&gt; +        somewhere up the call chain. I&apos;m fairly certain this assertion and the early return were
&gt; +        never made for a LiveNodeList argument that was registered for an invalidation. The following
&gt; +        assertion, that the m_listsInvalidatedAtDocument does contain the pointer to the given
&gt; +        LiveNodeList, was thus always true, so that element was removed from the HashSet and the list
&gt; +        was unregistered.
&gt; +
&gt; +        With the support for move semantics in HashTable and the m_listsInvalidatedAtDocument HashSet
&gt; +        being properly zeroed out, the assertion in Document::unregisterNodeListForInvalidation() should
&gt; +        check that the unregistration originates from Document::invalidateNodeListAndCollectionCaches()
&gt; +        and the m_listsInvalidatedAtDocument HashSet is empty, or that there is indeed a pointer to the
&gt; +        given LiveNodeList object in that HashSet. The LiveNodeList is unregistered either way, and the
&gt; +        corresponding item in the HashSet is removed.

Change log entry is *way* too long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022122</commentid>
    <comment_count>4</comment_count>
      <attachid>234829</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-13 10:04:05 -0700</bug_when>
    <thetext>Comment on attachment 234829
Patch

Hmm, on reflection I still don’t get what was going wrong even after reading all your comments. I presume we hit the m_inInvalidateNodeListAndCollectionCaches assertion. With what call stack?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023236</commentid>
    <comment_count>5</comment_count>
      <attachid>235121</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-07-18 03:41:32 -0700</bug_when>
    <thetext>Created attachment 235121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023297</commentid>
    <comment_count>6</comment_count>
      <attachid>235121</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-07-18 11:30:10 -0700</bug_when>
    <thetext>Comment on attachment 235121
Patch

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

&gt; Source/WebCore/dom/Document.cpp:3499
&gt; +    m_listsInvalidatedAtDocument.remove(&amp;list);

Why are we calling remove() on the list in the case the map is empty!?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023311</commentid>
    <comment_count>7</comment_count>
      <attachid>235121</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-18 12:19:13 -0700</bug_when>
    <thetext>Comment on attachment 235121
Patch

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

&gt;&gt; Source/WebCore/dom/Document.cpp:3499
&gt;&gt; +    m_listsInvalidatedAtDocument.remove(&amp;list);
&gt; 
&gt; Why are we calling remove() on the list in the case the map is empty!?

It’s harmless to remove something from an empty set; the boolean m_inInvalidateNodeListAndCollectionCaches is only compiled into assertions-enabled builds.

Let me turn the question around on you. Is avoiding this an important optimization?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023333</commentid>
    <comment_count>8</comment_count>
      <attachid>235121</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-07-18 13:03:50 -0700</bug_when>
    <thetext>Comment on attachment 235121
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Document.cpp:3499
&gt;&gt;&gt; +    m_listsInvalidatedAtDocument.remove(&amp;list);
&gt;&gt; 
&gt;&gt; Why are we calling remove() on the list in the case the map is empty!?
&gt; 
&gt; It’s harmless to remove something from an empty set; the boolean m_inInvalidateNodeListAndCollectionCaches is only compiled into assertions-enabled builds.
&gt; 
&gt; Let me turn the question around on you. Is avoiding this an important optimization?

Huh, I guess it&apos;s different from HashMap which, if I remember correctly, used to randomly crash or something.
I don&apos;t think this function needs to be fast since it&apos;s only called when a NodeList is removed which incurs some memory deallocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023408</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-18 17:47:14 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Huh, I guess it&apos;s different from HashMap which, if I remember correctly, used to randomly crash or something.

Maybe you are thinking of trying to remove a null pointer? It’s safe to try to remove something that’s not in a map or set. No crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023450</commentid>
    <comment_count>10</comment_count>
      <attachid>235121</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-07-19 03:09:38 -0700</bug_when>
    <thetext>Comment on attachment 235121
Patch

Clearing flags on attachment: 235121

Committed r171261: &lt;http://trac.webkit.org/changeset/171261&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023451</commentid>
    <comment_count>11</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-07-19 03:10:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024027</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-07-22 12:13:50 -0700</bug_when>
    <thetext>I am seeing the ASSERT in Document::unregisterCollection loading apple.com.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024033</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-07-22 12:24:26 -0700</bug_when>
    <thetext>Filed bug 135168.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234829</attachid>
            <date>2014-07-13 04:45:14 -0700</date>
            <delta_ts>2014-07-18 03:41:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134869-20140713044456.patch</filename>
            <type>text/plain</type>
            <size>3762</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM2N2U5YTM1ZGYyZjgx
ZGRhNGVmOGJhMjU5NjhhOTk5MTU1OTNjMy4uNmI3ODMxMzFjMTE5MmE3YjJkZGYzODFkYWVkOWFi
NTAyNjFjNThlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE0LTA3LTEzICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBEb2N1bWVudDo6dW5y
ZWdpc3Rlck5vZGVMaXN0Rm9ySW52YWxpZGF0aW9uKCkgaW5jb3JyZWN0bHkgY29vcGVyYXRlcyB3
aXRoIERvY3VtZW50OjppbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9uQ2FjaGVzKCkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDg2OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBtb3Zl
IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yIGZvciBIYXNoVGFibGUgKHIxNzA5
OTUsIHJvbGxlZCBvdXQgaW4gcjE3MDk5OSkKKyAgICAgICAgcmV2ZWFsZWQgdGhhdCBEb2N1bWVu
dDo6dW5yZWdpc3Rlck5vZGVMaXN0Rm9ySW52YWxpZGF0aW9uKCkgY29udGFpbnMgaW5jb3JyZWN0
IGFzc2VydGlvbnMgd2hlbgorICAgICAgICB1bnJlZ2lzdGVyaW5nIG5vZGUgbGlzdHMgZm9yIGlu
dmFsaWRhdGlvbnMgb3JpZ2luYXRpbmcgZnJvbQorICAgICAgICBEb2N1bWVudDo6aW52YWxpZGF0
ZU5vZGVMaXN0QW5kQ29sbGVjdGlvbkNhY2hlcygpLgorCisgICAgICAgIE9uY2UgSGFzaFRhYmxl
IGdhaW5lZCBwcm9wZXIgc3VwcG9ydCBmb3IgbW92ZSBzZW1hbnRpY3MgdGhlIFdURjo6bW92ZSgp
IGNhbGwgaW4KKyAgICAgICAgRG9jdW1lbnQ6OmludmFsaWRhdGVOb2RlTGlzdEFuZENvbGxlY3Rp
b25DYWNoZXMoKSBsZWZ0IHRoZSBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50IEhhc2hTZXQK
KyAgICAgICAgZW1wdHksIHdoaWxlIHByZXZpb3VzbHkgaXQgd291bGQgcmVtYWluIGludGFjdCBh
bmQgV1RGOjptb3ZlKCkgd291bGQgcGVyZm9ybSBhIGNvcHkgb2YgdGhlCisgICAgICAgIHVuZGVy
bHlpbmcgSGFzaFRhYmxlLgorCisgICAgICAgIFByZXZpb3VzbHkgRG9jdW1lbnQ6OnVucmVnaXN0
ZXJOb2RlTGlzdEZvckludmFsaWRhdGlvbigpIHdvdWxkIHJldHVybiBlYXJseSBpZiB0aGF0IEhh
c2hTZXQKKyAgICAgICAgbWVtYmVyIHdhcyBlbXB0eSwgYXNzZXJ0aW5nIHRoYXQgRG9jdW1lbnQ6
OmludmFsaWRhdGVOb2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXMoKSB3YXMKKyAgICAgICAgc29t
ZXdoZXJlIHVwIHRoZSBjYWxsIGNoYWluLiBJJ20gZmFpcmx5IGNlcnRhaW4gdGhpcyBhc3NlcnRp
b24gYW5kIHRoZSBlYXJseSByZXR1cm4gd2VyZQorICAgICAgICBuZXZlciBtYWRlIGZvciBhIExp
dmVOb2RlTGlzdCBhcmd1bWVudCB0aGF0IHdhcyByZWdpc3RlcmVkIGZvciBhbiBpbnZhbGlkYXRp
b24uIFRoZSBmb2xsb3dpbmcKKyAgICAgICAgYXNzZXJ0aW9uLCB0aGF0IHRoZSBtX2xpc3RzSW52
YWxpZGF0ZWRBdERvY3VtZW50IGRvZXMgY29udGFpbiB0aGUgcG9pbnRlciB0byB0aGUgZ2l2ZW4K
KyAgICAgICAgTGl2ZU5vZGVMaXN0LCB3YXMgdGh1cyBhbHdheXMgdHJ1ZSwgc28gdGhhdCBlbGVt
ZW50IHdhcyByZW1vdmVkIGZyb20gdGhlIEhhc2hTZXQgYW5kIHRoZSBsaXN0CisgICAgICAgIHdh
cyB1bnJlZ2lzdGVyZWQuCisKKyAgICAgICAgV2l0aCB0aGUgc3VwcG9ydCBmb3IgbW92ZSBzZW1h
bnRpY3MgaW4gSGFzaFRhYmxlIGFuZCB0aGUgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudCBI
YXNoU2V0CisgICAgICAgIGJlaW5nIHByb3Blcmx5IHplcm9lZCBvdXQsIHRoZSBhc3NlcnRpb24g
aW4gRG9jdW1lbnQ6OnVucmVnaXN0ZXJOb2RlTGlzdEZvckludmFsaWRhdGlvbigpIHNob3VsZAor
ICAgICAgICBjaGVjayB0aGF0IHRoZSB1bnJlZ2lzdHJhdGlvbiBvcmlnaW5hdGVzIGZyb20gRG9j
dW1lbnQ6OmludmFsaWRhdGVOb2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXMoKQorICAgICAgICBh
bmQgdGhlIG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQgSGFzaFNldCBpcyBlbXB0eSwgb3Ig
dGhhdCB0aGVyZSBpcyBpbmRlZWQgYSBwb2ludGVyIHRvIHRoZQorICAgICAgICBnaXZlbiBMaXZl
Tm9kZUxpc3Qgb2JqZWN0IGluIHRoYXQgSGFzaFNldC4gVGhlIExpdmVOb2RlTGlzdCBpcyB1bnJl
Z2lzdGVyZWQgZWl0aGVyIHdheSwgYW5kIHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIGl0ZW0g
aW4gdGhlIEhhc2hTZXQgaXMgcmVtb3ZlZC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3Rlck5vZGVMaXN0Rm9ySW52YWxp
ZGF0aW9uKToKKwogMjAxNC0wNy0xMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFtXaW5DYWlyb10gVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0
ZXIgcjE3MDkzNy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDViNTNhYTM4YWM5OTk1Njc4
ODBmMzNlNjRhZjM3N2M4MjcxZTVkMTcuLmQ1ZGUwNjEzZjcxMWRiOGUwOWFkN2NjMWFlYzdhY2Uz
YTExMDUzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMzQ5MSwxMyArMzQ5MSwxMSBA
QCB2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyTm9kZUxpc3RGb3JJbnZhbGlkYXRpb24oTGl2ZU5v
ZGVMaXN0JiBsaXN0KQogICAgIG1fbm9kZUxpc3RBbmRDb2xsZWN0aW9uQ291bnRzW2xpc3QuaW52
YWxpZGF0aW9uVHlwZSgpXS0tOwogICAgIGlmICghbGlzdC5pc1JlZ2lzdGVyZWRGb3JJbnZhbGlk
YXRpb25BdERvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fbGlzdHNJbnZh
bGlkYXRlZEF0RG9jdW1lbnQuc2l6ZSgpKSB7Ci0gICAgICAgIEFTU0VSVChtX2luSW52YWxpZGF0
ZU5vZGVMaXN0QW5kQ29sbGVjdGlvbkNhY2hlcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgQVNTRVJUKG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuY29udGFpbnMoJmxpc3QpKTsK
LSAgICBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnJlbW92ZSgmbGlzdCk7CiAgICAgbGlz
dC5zZXRSZWdpc3RlcmVkRm9ySW52YWxpZGF0aW9uQXREb2N1bWVudChmYWxzZSk7CisgICAgQVNT
RVJUKG1faW5JbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9uQ2FjaGVzICYmICFtX2xpc3Rz
SW52YWxpZGF0ZWRBdERvY3VtZW50LnNpemUoKQorICAgICAgICB8fCBtX2xpc3RzSW52YWxpZGF0
ZWRBdERvY3VtZW50LmNvbnRhaW5zKCZsaXN0KSk7CisgICAgLy8gVGhlcmUncyBubyBoYXJtIGlu
IHJlbW92aW5nIGFuIGl0ZW0gdGhhdCBwZXJoYXBzIGlzIG5vdCBpbiB0aGUgSGFzaFNldC4KKyAg
ICBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnJlbW92ZSgmbGlzdCk7CiB9CiAKIHZvaWQg
RG9jdW1lbnQ6OnJlZ2lzdGVyQ29sbGVjdGlvbihIVE1MQ29sbGVjdGlvbiYgY29sbGVjdGlvbikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235121</attachid>
            <date>2014-07-18 03:41:32 -0700</date>
            <delta_ts>2014-07-19 03:09:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134869-20140718034115.patch</filename>
            <type>text/plain</type>
            <size>3226</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MTIxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE0LTA3LTE4ICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBEb2N1bWVudDo6dW5yZWdp
c3Rlck5vZGVMaXN0Zm9ySW52YWxpZGF0aW9uKCkgYW5kIERvY3VtZW50Ojp1bnJlZ2lzdGVyQ29s
bGVjdGlvbigpIGhhdmUgaW5jb3JyZWN0IGFzc2VydGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDg2OQorCisgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgorCisgICAgICAgIEJvdGggbWV0aG9kcyBzaG91bGQgYXNzZXJ0IHRoYXQg
dGhlIHJlbGV2YW50IEhhc2hNYXAgaXMgZWl0aGVyIGVtcHR5IGlmIGludmFsaWRhdGlvbiBvcmln
aW5hdGVzCisgICAgICAgIGZyb20gRG9jdW1lbnQ6OmludmFsaWRhdGVOb2RlTGlzdEFuZENvbGxl
Y3Rpb25DYWNoZXMoKSBvciBhY3V0YWxseSBjb250YWlucyB0aGUgZWxlbWVudCB0aGF0IGlzCisg
ICAgICAgIGJlaW5nIGludmFsaWRhdGVkLiBJbiB0aGUgZmlyc3QgY2FzZSB0aGUgSGFzaE1hcCBp
cyBlbXB0eSBiZWNhdXNlIGl0cyBlbnRyaWVzIHdlcmUgbW92ZWQgb3V0IGluCisgICAgICAgIHRo
ZSBEb2N1bWVudDo6aW52YWxpZGF0ZU5vZGVMaXN0QW5kQ29sbGVjdGlvbkNhY2hlcygpLgorCisg
ICAgICAgIFRoaXMgd2FzIGV4cG9zZWQgYnkgcjE3MDk5NSAobGF0ZXIgcm9sbGVkIG91dCBpbiBy
MTcwOTk5KSB3aGljaCBpbnRyb2R1Y2VkIG1vdmUgY29uc3RydWN0b3IgYW5kCisgICAgICAgIG1v
dmUgYXNzaWdubWVudCBvcGVyYXRvcnMgZm9yIEhhc2hUYWJsZS4gVGhlIGFzc2VydGlvbnMgaW4g
dGhlIHRpdHVsYXIgbWV0aG9kcyB3b24ndCBiZSBwYXNzaW5nCisgICAgICAgIHVudGlsIHIxNzA5
OTUgcmVsYW5kcy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6dW5yZWdpc3Rlck5vZGVMaXN0Rm9ySW52YWxpZGF0aW9uKToKKwogMjAx
NC0wNy0xOCAgUmFkdSBTdGF2aWxhICA8c3RhdmlsYUBhZG9iZS5jb20+CiAKICAgICAgICAgUkVH
UkVTU0lPTiAocjE2OTEwNSk6IENyYXNoIGluIHNlbGVjdGlvbgpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAxNzEyMTgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDkxLDEzICszNDkxLDEyIEBAIHZvaWQgRG9jdW1l
bnQ6OnVucmVnaXN0ZXJOb2RlTGlzdEZvckludmEKICAgICBtX25vZGVMaXN0QW5kQ29sbGVjdGlv
bkNvdW50c1tsaXN0LmludmFsaWRhdGlvblR5cGUoKV0tLTsKICAgICBpZiAoIWxpc3QuaXNSZWdp
c3RlcmVkRm9ySW52YWxpZGF0aW9uQXREb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCFtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnNpemUoKSkgewotICAgICAgICBBU1NF
UlQobV9pbkludmFsaWRhdGVOb2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVChtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmNv
bnRhaW5zKCZsaXN0KSk7Ci0gICAgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5yZW1vdmUo
Jmxpc3QpOworCiAgICAgbGlzdC5zZXRSZWdpc3RlcmVkRm9ySW52YWxpZGF0aW9uQXREb2N1bWVu
dChmYWxzZSk7CisgICAgQVNTRVJUKG1faW5JbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9u
Q2FjaGVzCisgICAgICAgID8gbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5pc0VtcHR5KCkK
KyAgICAgICAgOiBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmNvbnRhaW5zKCZsaXN0KSk7
CisgICAgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5yZW1vdmUoJmxpc3QpOwogfQogCiB2
b2lkIERvY3VtZW50OjpyZWdpc3RlckNvbGxlY3Rpb24oSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rp
b24pCkBAIC0zNTExLDE0ICszNTEwLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJDb2xs
ZWN0aW9uKEhUTUwKIHsKICAgICBBU1NFUlQobV9ub2RlTGlzdEFuZENvbGxlY3Rpb25Db3VudHNb
Y29sbGVjdGlvbi5pbnZhbGlkYXRpb25UeXBlKCldKTsKICAgICBtX25vZGVMaXN0QW5kQ29sbGVj
dGlvbkNvdW50c1tjb2xsZWN0aW9uLmludmFsaWRhdGlvblR5cGUoKV0tLTsKLSAgICBpZiAoY29s
bGVjdGlvbi5pc1Jvb3RlZEF0RG9jdW1lbnQoKSkgewotICAgICAgICBpZiAoIW1fY29sbGVjdGlv
bnNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9p
bkludmFsaWRhdGVOb2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXMpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChtX2NvbGxlY3Rpb25zSW52YWxpZGF0ZWRB
dERvY3VtZW50LmNvbnRhaW5zKCZjb2xsZWN0aW9uKSk7Ci0gICAgICAgIG1fY29sbGVjdGlvbnNJ
bnZhbGlkYXRlZEF0RG9jdW1lbnQucmVtb3ZlKCZjb2xsZWN0aW9uKTsKLSAgICB9CisgICAgaWYg
KCFjb2xsZWN0aW9uLmlzUm9vdGVkQXREb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9pbkludmFsaWRhdGVOb2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXMKKyAgICAg
ICAgPyBtX2NvbGxlY3Rpb25zSW52YWxpZGF0ZWRBdERvY3VtZW50LmlzRW1wdHkoKQorICAgICAg
ICA6IG1fY29sbGVjdGlvbnNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuY29udGFpbnMoJmNvbGxlY3Rp
b24pKTsKKyAgICBtX2NvbGxlY3Rpb25zSW52YWxpZGF0ZWRBdERvY3VtZW50LnJlbW92ZSgmY29s
bGVjdGlvbik7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmNvbGxlY3Rpb25DYWNoZWRJZE5hbWVNYXAo
Y29uc3QgSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>