<?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>111805</bug_id>
          
          <creation_ts>2013-03-07 18:31:41 -0800</creation_ts>
          <short_desc>DatabaseTracker::origins() is missing some databases in a multi-process scenario</short_desc>
          <delta_ts>2013-03-11 16:46:55 -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>WebCore Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>beidson</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>850732</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-07 18:31:41 -0800</bug_when>
    <thetext>Currently, DatabaseTracker::origins() returns a list of database origins based on an in RAM quotaMap.  The quotaMap was loaded from the sql tracker database at one point in time.  In a scenario where a second browser process opens a second database / origin, DatabaseTracker::origins() in the first browser process would not be aware of the new database because its quotaMap was cached in memory before the new database existed.  

Note: the 2nd browser process would have updated the sql tracker database (shared by all browser processes) on disk with details about the new database that it created.  Hence, the fix is simply to have DatabaseTracker::origins() flush its quotaMap cache and re-read the information from the sql tracker database on disk.  This will ensure that DatabaseTracker::origins() returns an accurate list of origins no matter which process it is queried from.

ref: &lt;rdar://problem/13318532&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850736</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-07 18:35:40 -0800</bug_when>
    <thetext>&gt; Hence, the fix is simply to have DatabaseTracker::origins() flush its quotaMap cache and re-read the information from the sql tracker database on disk.

At this point, is there any reason to keep a quotaMap in memory? When is it ever valid?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851753</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-09 01:25:39 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; At this point, is there any reason to keep a quotaMap in memory? When is it ever valid?

After analyzing the code some more, I agree that there is no reason to keep quotaMap.  Will upload a patch with quotaMap removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851754</commentid>
    <comment_count>3</comment_count>
      <attachid>192340</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-09 01:26:34 -0800</bug_when>
    <thetext>Created attachment 192340
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852630</commentid>
    <comment_count>4</comment_count>
      <attachid>192340</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-11 13:06:34 -0700</bug_when>
    <thetext>Comment on attachment 192340
the patch.

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

&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:260
&gt; +    statement.bindText(1, origin-&gt;databaseIdentifier());
&gt; +    int result;
&gt; +    int rows = 0;
&gt; +    while ((result = statement.step()) == SQLResultRow)
&gt; +        rows++;
&gt; +    ASSERT(rows &lt;= 1);
&gt; +    if (result != SQLResultDone)
&gt; +        LOG_ERROR(&quot;Failed to read in origins from the database.&quot;);

Is it an SQL API requirement that we step through each statement result like this, even though we only care about whether there were any results? This code looks strange.

&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:426
&gt; +    size_t capacityIncrement = 50;
&gt; +    originsResult.reserveCapacity(capacityIncrement);
&gt;      while ((result = statement.step()) == SQLResultRow) {
&gt;          RefPtr&lt;SecurityOrigin&gt; origin = SecurityOrigin::createFromDatabaseIdentifier(statement.getColumnText(0));
&gt; -        m_quotaMap-&gt;set(origin.get()-&gt;isolatedCopy(), statement.getColumnInt64(1));
&gt; +        size_t capacity = originsResult.capacity();
&gt; +        if (capacity == originsResult.size())
&gt; +            originsResult.reserveCapacity(capacity + capacityIncrement);
&gt; +
&gt; +        originsResult.append(origin-&gt;isolatedCopy());

It looks like you&apos;ve duplicated the Vector growth algorithm by hand here, and in a way that changes the built-in O(log(n)) algorithm into an O(N^2) algorithm. This is almost certainly wrong. Why can&apos;t we just use the built-in algorithm?

&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:744
&gt; +    openTrackerDatabase(DontCreateIfDoesNotExist);
&gt; +    if (!m_database.isOpen())
&gt; +        return quota;
&gt; +
&gt; +    SQLiteStatement statement(m_database, &quot;SELECT quota FROM Origins where origin=?;&quot;);
&gt; +    if (statement.prepare() != SQLResultOk) {
&gt; +        LOG_ERROR(&quot;Failed to prepare statement.&quot;);
&gt; +        return quota;
&gt; +    }
&gt; +
&gt; +    statement.bindText(1, origin-&gt;databaseIdentifier());

This code should be a helper function, shared with the function above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852749</commentid>
    <comment_count>5</comment_count>
      <attachid>192340</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-11 14:44:55 -0700</bug_when>
    <thetext>Comment on attachment 192340
the patch.

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

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:260
&gt;&gt; +        LOG_ERROR(&quot;Failed to read in origins from the database.&quot;);
&gt; 
&gt; Is it an SQL API requirement that we step through each statement result like this, even though we only care about whether there were any results? This code looks strange.

The SQLiteStatement destructor will call sqlite3_finalize() on the under sqlite statement.  Hence, there is no need to run the steps to completion.  I will change this code to reflect that.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:426
&gt;&gt; +        originsResult.append(origin-&gt;isolatedCopy());
&gt; 
&gt; It looks like you&apos;ve duplicated the Vector growth algorithm by hand here, and in a way that changes the built-in O(log(n)) algorithm into an O(N^2) algorithm. This is almost certainly wrong. Why can&apos;t we just use the built-in algorithm?

I will change the code to use the default append().

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:744
&gt;&gt; +    statement.bindText(1, origin-&gt;databaseIdentifier());
&gt; 
&gt; This code should be a helper function, shared with the function above.

We talked about this offline.  There’s no clean way to factor this initialization code out into a common function.  So, we’ll leave these as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852780</commentid>
    <comment_count>6</comment_count>
      <attachid>192573</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-11 15:20:25 -0700</bug_when>
    <thetext>Created attachment 192573
updated patch with Geoff’s comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852861</commentid>
    <comment_count>7</comment_count>
      <attachid>192573</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-11 16:39:33 -0700</bug_when>
    <thetext>Comment on attachment 192573
updated patch with Geoff’s comments addressed.

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

r=me

&gt; Source/WebCore/ChangeLog:8
&gt; +        This changes is needed because using the quotaMap cache can result in

Typo: Should be &quot;change is needed&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852872</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-11 16:46:55 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r145431: &lt;http://trac.webkit.org/changeset/145431&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192340</attachid>
            <date>2013-03-09 01:26:34 -0800</date>
            <delta_ts>2013-03-11 15:20:25 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-111805c.patch</filename>
            <type>text/plain</type>
            <size>9767</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTMwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAzLTA5ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIHVzZSBvZiB0aGUg
cXVvdGFNYXAgY2FjaGUgaW4gRGF0YWJhc2VUcmFja2VyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExODA1LgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlcyBpcyBuZWVkZWQgYmVjYXVz
ZSB1c2luZyB0aGUgcXVvdGFNYXAgY2FjaGUgY2FuIHJlc3VsdCBpbgorICAgICAgICBhbiBpbmFj
Y3VyYXRlIHJlYWQgKGluIGEgbXVsdGktcHJvY2VzcyBzeXN0ZW0pIG9uIHdoYXQgZGF0YWJhc2Ug
ZmlsZXMKKyAgICAgICAgYXJlIGFjdHVhbGx5IHByZXNlbnQgb24gdGhlIGZpbGVzeXN0ZW0uIElu
c3RlYWQgb2YgdXNpbmcgdGhlIHF1b3RhTWFwCisgICAgICAgIGNhY2hlLCB3ZSByZWx5IG9uIHRo
ZSB0cmFja2VyIGRhdGFiYXNlIGFuZCBxdWVyeSBpdCBldmVyeSB0aW1lIHdlIG5lZWQKKyAgICAg
ICAgdGhlIG9yaWdpbi9xdW90YSBpbmZvcm1hdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMu
CisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0FkZXF1YXRlUXVvdGFGb3JPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdp
bk5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdpbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpxdW90YUZvck9yaWdpbk5vTG9jayk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3RhKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4pOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmg6CisKIDIwMTMtMDMtMDcgIFJvYmVydCBIb2dhbiAg
PHJvYmVydEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE0MDkwNyk6IEluY29y
cmVjdCBiYXNlbGluZSBmb3IgY2VsbHMgd2l0aCBtZWRpYSBjb250ZW50IGR1cmluZyBsb2FkCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAxNDUxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
OSw2ICsxMzksNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAK
IGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJv
ciYgZXJyKQogeworICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CiAgICAg
dW5zaWduZWQgbG9uZyBsb25nIHVzYWdlID0gdXNhZ2VGb3JPcmlnaW4ob3JpZ2luKTsKIAogICAg
IC8vIElmIHRoZSBkYXRhYmFzZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0aW9uLgpAQCAtMjM5
LDkgKzI0MCwyNiBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6cmV0cnlDYW5Fc3RhYmxpc2hECiBi
b29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmln
aW4qIG9yaWdpbikKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwot
ICAgIHBvcHVsYXRlT3JpZ2luc0lmTmVlZGVkKCk7Ci0gICAgQVNTRVJUKG1fcXVvdGFNYXApOwot
ICAgIHJldHVybiBtX3F1b3RhTWFwLT5jb250YWlucyhvcmlnaW4pOworICAgIG9wZW5UcmFja2Vy
RGF0YWJhc2UoRG9udENyZWF0ZUlmRG9lc05vdEV4aXN0KTsKKyAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5zIHdoZXJlIG9y
aWdpbj0/OyIpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9y
aWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgIGludCByZXN1bHQ7CisgICAgaW50IHJv
d3MgPSAwOworICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVz
dWx0Um93KQorICAgICAgICByb3dzKys7CisgICAgQVNTRVJUKHJvd3MgPD0gMSk7CisgICAgaWYg
KHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBy
ZWFkIGluIG9yaWdpbnMgZnJvbSB0aGUgZGF0YWJhc2UuIik7CisKKyAgICByZXR1cm4gKHJvd3Mg
PiAwKTsKIH0KIAogYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4pCkBAIC0zODIsNDMgKzQwMCwzNyBAQCBTdHJpbmcgRGF0YWJhc2VU
cmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgcmV0dXJuIGZ1bGxQYXRoRm9yRGF0YWJhc2VO
b0xvY2sob3JpZ2luLCBuYW1lLCBjcmVhdGVJZk5vdEV4aXN0cykuaXNvbGF0ZWRDb3B5KCk7CiB9
CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0ZU9yaWdpbnNJZk5lZWRlZCgpCit2b2lk
IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+
JiBvcmlnaW5zUmVzdWx0KQogewotICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2so
KSk7Ci0gICAgaWYgKG1fcXVvdGFNYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcXVvdGFN
YXAgPSBhZG9wdFB0cihuZXcgUXVvdGFNYXApOworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFz
ZShtX2RhdGFiYXNlR3VhcmQpOwogCiAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShEb250Q3JlYXRl
SWZEb2VzTm90RXhpc3QpOwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIG9yaWdpbiwgcXVvdGEgRlJPTSBPcmlnaW5zIik7Ci0KKyAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOwogICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaW50IHJlc3VsdDsKKyAgICBzaXplX3QgY2FwYWNpdHlJbmNyZW1lbnQgPSA1
MDsKKyAgICBvcmlnaW5zUmVzdWx0LnJlc2VydmVDYXBhY2l0eShjYXBhY2l0eUluY3JlbWVudCk7
CiAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cp
IHsKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgw
KSk7Ci0gICAgICAgIG1fcXVvdGFNYXAtPnNldChvcmlnaW4uZ2V0KCktPmlzb2xhdGVkQ29weSgp
LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSkpOworICAgICAgICBzaXplX3QgY2FwYWNpdHkg
PSBvcmlnaW5zUmVzdWx0LmNhcGFjaXR5KCk7CisgICAgICAgIGlmIChjYXBhY2l0eSA9PSBvcmln
aW5zUmVzdWx0LnNpemUoKSkKKyAgICAgICAgICAgIG9yaWdpbnNSZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KGNhcGFjaXR5ICsgY2FwYWNpdHlJbmNyZW1lbnQpOworCisgICAgICAgIG9yaWdpbnNSZXN1
bHQuYXBwZW5kKG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCkpOwogICAgIH0KKyAgICBvcmlnaW5zUmVz
dWx0LnNocmlua1RvRml0KCk7CiAKICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpCiAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgaW4gYWxsIG9yaWdpbnMgZnJvbSB0aGUg
ZGF0YWJhc2UuIik7CiB9CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKFZlY3RvcjxS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkKLXsKLSAgICBNdXRleExvY2tlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBwb3B1bGF0ZU9yaWdpbnNJZk5lZWRlZCgp
OwotICAgIEFTU0VSVChtX3F1b3RhTWFwKTsKLSAgICBjb3B5S2V5c1RvVmVjdG9yKCptX3F1b3Rh
TWFwLCByZXN1bHQpOwotfQotCiBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc0Zv
ck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYgcmVz
dWx0VmVjdG9yKQogewogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CkBA
IC03MTcsOSArNzI5LDM0IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVz
YWcKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnF1b3RhRm9yT3JpZ2luTm9M
b2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3Vh
cmQudHJ5TG9jaygpKTsKLSAgICBwb3B1bGF0ZU9yaWdpbnNJZk5lZWRlZCgpOwotICAgIEFTU0VS
VChtX3F1b3RhTWFwKTsKLSAgICByZXR1cm4gbV9xdW90YU1hcC0+Z2V0KG9yaWdpbik7CisgICAg
dW5zaWduZWQgbG9uZyBsb25nIHF1b3RhID0gMDsKKworICAgIG9wZW5UcmFja2VyRGF0YWJhc2Uo
RG9udENyZWF0ZUlmRG9lc05vdEV4aXN0KTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
CisgICAgICAgIHJldHVybiBxdW90YTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIlNFTEVDVCBxdW90YSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT87Iik7
CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQuIik7CisgICAgICAgIHJldHVy
biBxdW90YTsKKyAgICB9CisKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKSk7CisgICAgaW50IHJlc3VsdDsKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgaW50IHJvd3MgPSAwOworI2VuZGlmCisgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgcXVvdGEgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50NjQoMCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICByb3dzKys7
CisjZW5kaWYKKyAgICB9CisgICAgQVNTRVJUKHJvd3MgPD0gMSk7CisgICAgaWYgKHJlc3VsdCAh
PSBTUUxSZXN1bHREb25lKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGluIG9y
aWdpbnMgZnJvbSB0aGUgZGF0YWJhc2UuIik7CisKKyAgICByZXR1cm4gcXVvdGE7CiB9CiAKIHVu
c2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCkBAIC03MzksNyArNzc2LDggQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6
OnNldFF1b3RhKFNlY3VyaXR5TwogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3F1b3RhTWFwLT5jb250YWlucyhvcmlnaW4pKSB7Cisg
ICAgYm9vbCBvcmlnaW5FbnRyeUV4aXN0cyA9IGhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKG9yaWdp
bik7CisgICAgaWYgKCFvcmlnaW5FbnRyeUV4aXN0cykgewogICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBPcmlnaW5zIFZBTFVFUyAoPywg
PykiKTsKICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsK
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJXMgaW4g
dGhlIHRyYWNrZXIiLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgp
KTsKQEAgLTc2OCw5ICs4MDYsNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0UXVvdGEoU2Vj
dXJpdHlPCiAjZW5kaWYKICAgICB9CiAKLSAgICAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IE9LIHRv
IHVwZGF0ZSB0aGUgcXVvdGEgaW4gbWVtb3J5IGlmIHdlIGZhaWxlZCB0byB1cGRhdGUgaXQgb24g
ZGlzaz8KLSAgICBtX3F1b3RhTWFwLT5zZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgcXVvdGEp
OwotCiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2Rp
ZnlPcmlnaW4ob3JpZ2luKTsKIH0KQEAgLTc4MSw4ICs4MTYsNiBAQCBib29sIERhdGFiYXNlVHJh
Y2tlcjo6YWRkRGF0YWJhc2UoU2VjdXJpCiAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShDcmVhdGVJ
ZkRvZXNOb3RFeGlzdCk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcG9wdWxhdGVPcmlnaW5zSWZOZWVkZWQoKTsKLSAgICBBU1NFUlQo
bV9xdW90YU1hcCk7CiAKICAgICAvLyBOZXcgZGF0YWJhc2Ugc2hvdWxkIG5ldmVyIGJlIGFkZGVk
IHVudGlsIHRoZSBvcmlnaW4gaGFzIGJlZW4gZXN0YWJsaXNoZWQKICAgICBBU1NFUlQoaGFzRW50
cnlGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSk7CkBAIC04ODAsMTIgKzkxMywyNSBAQCBib29sIERh
dGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyCiAKICAgICAgICAgU1FMaXRlRmlsZVN5
c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShvcmlnaW5QYXRoKG9yaWdpbikpOwog
Ci0gICAgICAgIHBvcHVsYXRlT3JpZ2luc0lmTmVlZGVkKCk7CiAgICAgICAgIFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4gb3JpZ2luUG9zc2libHlMYXN0UmVmZXJlbmNlID0gb3JpZ2luOwotICAgICAg
ICBtX3F1b3RhTWFwLT5yZW1vdmUob3JpZ2luKTsKKyAgICAgICAgaW50IG9yaWdpbnMgPSAwOwor
CisgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoRG9udENyZWF0ZUlmRG9lc05vdEV4aXN0KTsK
KyAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKKyAgICAgICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmlnaW5z
Iik7CisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPaykg
eworICAgICAgICAgICAgICAgIGludCByZXN1bHQ7CisgICAgICAgICAgICAgICAgd2hpbGUgKChy
ZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpCisgICAgICAgICAgICAg
ICAgICAgIG9yaWdpbnMrKzsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVz
dWx0RG9uZSkKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBp
biBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIp
OworICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUgbGFzdCBvcmlnaW4s
IGRvIHNvbWUgYWRkaXRpb25hbCBkZWxldGlvbi4KLSAgICAgICAgaWYgKG1fcXVvdGFNYXAtPmlz
RW1wdHkoKSkgeworICAgICAgICBpZiAoIW9yaWdpbnMpIHsKICAgICAgICAgICAgIGlmIChtX2Rh
dGFiYXNlLmlzT3BlbigpKQogICAgICAgICAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKICAg
ICAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNrZXJEYXRh
YmFzZVBhdGgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHJldmlzaW9uIDE0NTE2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNyw3ICsxMzcsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzRW50cnlGb3JEYXRh
YmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKTsK
IAogICAgIGJvb2wgYWRkRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdm9pZCBwb3B1bGF0ZU9yaWdpbnNJZk5lZWRl
ZCgpOwogCiAgICAgYm9vbCBkZWxldGVEYXRhYmFzZUZpbGUoU2VjdXJpdHlPcmlnaW4qLCBjb25z
dCBTdHJpbmcmIG5hbWUpOwogCkBAIC0xNTAsMTMgKzE0OSwxMCBAQCBwcml2YXRlOgogICAgIE11
dGV4IG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQ7CiAgICAgbXV0YWJsZSBPd25QdHI8RGF0YWJhc2VP
cmlnaW5NYXA+IG1fb3BlbkRhdGFiYXNlTWFwOwogCi0gICAgLy8gVGhpcyBsb2NrIHByb3RlY3Rz
IG1fZGF0YWJhc2UsIG1fcXVvdGFNYXAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBtX29yaWdp
bnNCZWluZ0RlbGV0ZWQsIG1fYmVpbmdDcmVhdGVkLCBhbmQgbV9iZWluZ0RlbGV0ZWQuCisgICAg
Ly8gVGhpcyBsb2NrIHByb3RlY3RzIG1fZGF0YWJhc2UsIG1fb3JpZ2luTG9ja01hcCwgbV9kYXRh
YmFzZURpcmVjdG9yeVBhdGgsIG1fb3JpZ2luc0JlaW5nRGVsZXRlZCwgbV9iZWluZ0NyZWF0ZWQs
IGFuZCBtX2JlaW5nRGVsZXRlZC4KICAgICBNdXRleCBtX2RhdGFiYXNlR3VhcmQ7CiAgICAgU1FM
aXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCB1bnNpZ25lZCBsb25nIGxvbmc+IFF1b3RhTWFwOwotICAgIG11dGFibGUg
T3duUHRyPFF1b3RhTWFwPiBtX3F1b3RhTWFwOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPE9yaWdpbkxvY2s+ID4gT3JpZ2luTG9ja01hcDsKICAgICBPcmlnaW5Mb2NrTWFw
IG1fb3JpZ2luTG9ja01hcDsKIAo=
</data>
<flag name="review"
          id="213556"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192573</attachid>
            <date>2013-03-11 15:20:25 -0700</date>
            <delta_ts>2013-03-11 16:39:33 -0700</delta_ts>
            <desc>updated patch with Geoff’s comments addressed.</desc>
            <filename>bug-111805.patch</filename>
            <type>text/plain</type>
            <size>8834</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAzLTExICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIHVzZSBvZiB0aGUg
cXVvdGFNYXAgY2FjaGUgaW4gRGF0YWJhc2VUcmFja2VyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExODA1LgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlcyBpcyBuZWVkZWQgYmVjYXVz
ZSB1c2luZyB0aGUgcXVvdGFNYXAgY2FjaGUgY2FuIHJlc3VsdCBpbgorICAgICAgICBhbiBpbmFj
Y3VyYXRlIHJlYWQgKGluIGEgbXVsdGktcHJvY2VzcyBzeXN0ZW0pIG9uIHdoYXQgZGF0YWJhc2Ug
ZmlsZXMKKyAgICAgICAgYXJlIGFjdHVhbGx5IHByZXNlbnQgb24gdGhlIGZpbGVzeXN0ZW0uIElu
c3RlYWQgb2YgdXNpbmcgdGhlIHF1b3RhTWFwCisgICAgICAgIGNhY2hlLCB3ZSByZWx5IG9uIHRo
ZSB0cmFja2VyIGRhdGFiYXNlIGFuZCBxdWVyeSBpdCBldmVyeSB0aW1lIHdlIG5lZWQKKyAgICAg
ICAgdGhlIG9yaWdpbi9xdW90YSBpbmZvcm1hdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMu
CisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0FkZXF1YXRlUXVvdGFGb3JPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdp
bk5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdpbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpxdW90YUZvck9yaWdpbk5vTG9jayk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3RhKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4pOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmg6CisKIDIwMTMtMDMtMTEgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUm9sbCBvdXQgcGFydCBvZiByMTQ0Njcx
LgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTQ1MTY3KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzksNiArMTM5LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJh
cwogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbihTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNl
RXJyb3ImIGVycikKIHsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwog
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZSA9IHVzYWdlRm9yT3JpZ2luKG9yaWdpbik7CiAK
ICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQsIGFsbG93IGl0cyBjcmVhdGlvbi4KQEAg
LTIzOSw5ICsyNDAsMTkgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OnJldHJ5Q2FuRXN0YWJsaXNo
RAogYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygp
KTsKLSAgICBwb3B1bGF0ZU9yaWdpbnNJZk5lZWRlZCgpOwotICAgIEFTU0VSVChtX3F1b3RhTWFw
KTsKLSAgICByZXR1cm4gbV9xdW90YU1hcC0+Y29udGFpbnMob3JpZ2luKTsKKyAgICBvcGVuVHJh
Y2tlckRhdGFiYXNlKERvbnRDcmVhdGVJZkRvZXNOb3RFeGlzdCk7CisgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyB3aGVy
ZSBvcmlnaW49PzsiKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRP
aykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgx
LCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKworICAgIHJldHVybiBzdGF0ZW1lbnQu
c3RlcCgpID09IFNRTFJlc3VsdFJvdzsKIH0KIAogYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0Vu
dHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCkBAIC0zODIsMjAgKzM5MywxNSBA
QCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgcmV0dXJuIGZ1
bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2luLCBuYW1lLCBjcmVhdGVJZk5vdEV4aXN0cyku
aXNvbGF0ZWRDb3B5KCk7CiB9CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0ZU9yaWdp
bnNJZk5lZWRlZCgpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucyhWZWN0b3I8UmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiA+JiBvcmlnaW5zUmVzdWx0KQogewotICAgIEFTU0VSVCghbV9kYXRh
YmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgaWYgKG1fcXVvdGFNYXApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fcXVvdGFNYXAgPSBhZG9wdFB0cihuZXcgUXVvdGFNYXApOworICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwogCiAgICAgb3BlblRyYWNrZXJE
YXRhYmFzZShEb250Q3JlYXRlSWZEb2VzTm90RXhpc3QpOwogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcXVvdGEgRlJPTSBPcmlnaW5zIik7Ci0KKyAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZS
T00gT3JpZ2lucyIpOwogICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50LiIpOwog
ICAgICAgICByZXR1cm47CkBAIC00MDQsMjEgKzQxMCwxNCBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6cG9wdWxhdGVPcmlnaW5zSWZOCiAgICAgaW50IHJlc3VsdDsKICAgICB3aGlsZSAoKHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykgewogICAgICAgICBSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJh
c2VJZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKLSAgICAgICAgbV9xdW90
YU1hcC0+c2V0KG9yaWdpbi5nZXQoKS0+aXNvbGF0ZWRDb3B5KCksIHN0YXRlbWVudC5nZXRDb2x1
bW5JbnQ2NCgxKSk7CisgICAgICAgIG9yaWdpbnNSZXN1bHQuYXBwZW5kKG9yaWdpbi0+aXNvbGF0
ZWRDb3B5KCkpOwogICAgIH0KKyAgICBvcmlnaW5zUmVzdWx0LnNocmlua1RvRml0KCk7CiAKICAg
ICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHJlYWQgaW4gYWxsIG9yaWdpbnMgZnJvbSB0aGUgZGF0YWJhc2UuIik7CiB9CiAKLXZvaWQg
RGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4m
IHJlc3VsdCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJk
KTsKLSAgICBwb3B1bGF0ZU9yaWdpbnNJZk5lZWRlZCgpOwotICAgIEFTU0VSVChtX3F1b3RhTWFw
KTsKLSAgICBjb3B5S2V5c1RvVmVjdG9yKCptX3F1b3RhTWFwLCByZXN1bHQpOwotfQotCiBib29s
IERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc0Zvck9yaWdpbk5vTG9jayhTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0VmVjdG9yKQogewogICAgIEFTU0VS
VCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CkBAIC03MTcsOSArNzE2LDIzIEBAIHVuc2ln
bmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWcKIHVuc2lnbmVkIGxvbmcgbG9uZyBE
YXRhYmFzZVRyYWNrZXI6OnF1b3RhRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4pCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICBwb3B1
bGF0ZU9yaWdpbnNJZk5lZWRlZCgpOwotICAgIEFTU0VSVChtX3F1b3RhTWFwKTsKLSAgICByZXR1
cm4gbV9xdW90YU1hcC0+Z2V0KG9yaWdpbik7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHF1b3Rh
ID0gMDsKKworICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoRG9udENyZWF0ZUlmRG9lc05vdEV4aXN0
KTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiBxdW90YTsK
KworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBxdW90
YSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT87Iik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJl
cGFyZSBzdGF0ZW1lbnQuIik7CisgICAgICAgIHJldHVybiBxdW90YTsKKyAgICB9CisgICAgc3Rh
dGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworCisgICAg
aWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KQorICAgICAgICBxdW90YSA9IHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKworICAgIHJldHVybiBxdW90YTsKIH0KIAogdW5z
aWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbikKQEAgLTczOSw3ICs3NTIsOCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
c2V0UXVvdGEoU2VjdXJpdHlPCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIW1fcXVvdGFNYXAtPmNvbnRhaW5zKG9yaWdpbikpIHsKKyAg
ICBib29sIG9yaWdpbkVudHJ5RXhpc3RzID0gaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3JpZ2lu
KTsKKyAgICBpZiAoIW9yaWdpbkVudHJ5RXhpc3RzKSB7CiAgICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/
KSIpOwogICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAlcyBpbiB0
aGUgdHJhY2tlciIsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkp
OwpAQCAtNzY4LDkgKzc4Miw2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRRdW90YShTZWN1
cml0eU8KICNlbmRpZgogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJcyBpdCByZWFsbHkgT0sgdG8g
dXBkYXRlIHRoZSBxdW90YSBpbiBtZW1vcnkgaWYgd2UgZmFpbGVkIHRvIHVwZGF0ZSBpdCBvbiBk
aXNrPwotICAgIG1fcXVvdGFNYXAtPnNldChvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBxdW90YSk7
Ci0KICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlm
eU9yaWdpbihvcmlnaW4pOwogfQpAQCAtNzgxLDggKzc5Miw2IEBAIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjphZGREYXRhYmFzZShTZWN1cmkKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKENyZWF0ZUlm
RG9lc05vdEV4aXN0KTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBwb3B1bGF0ZU9yaWdpbnNJZk5lZWRlZCgpOwotICAgIEFTU0VSVCht
X3F1b3RhTWFwKTsKIAogICAgIC8vIE5ldyBkYXRhYmFzZSBzaG91bGQgbmV2ZXIgYmUgYWRkZWQg
dW50aWwgdGhlIG9yaWdpbiBoYXMgYmVlbiBlc3RhYmxpc2hlZAogICAgIEFTU0VSVChoYXNFbnRy
eUZvck9yaWdpbk5vTG9jayhvcmlnaW4pKTsKQEAgLTg4MCwxMiArODg5LDIwIEBAIGJvb2wgRGF0
YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKIAogICAgICAgICBTUUxpdGVGaWxlU3lz
dGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KG9yaWdpblBhdGgob3JpZ2luKSk7CiAK
LSAgICAgICAgcG9wdWxhdGVPcmlnaW5zSWZOZWVkZWQoKTsKICAgICAgICAgUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBvcmlnaW5Qb3NzaWJseUxhc3RSZWZlcmVuY2UgPSBvcmlnaW47Ci0gICAgICAg
IG1fcXVvdGFNYXAtPnJlbW92ZShvcmlnaW4pOworICAgICAgICBib29sIGlzRW1wdHkgPSB0cnVl
OworCisgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoRG9udENyZWF0ZUlmRG9lc05vdEV4aXN0
KTsKKyAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKKyAgICAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBvcmlnaW4gRlJPTSBPcmln
aW5zIik7CisgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRP
aykKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVu
dC4iKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMUmVzdWx0
Um93KQorICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKKyAgICAgICAgfQogCiAgICAg
ICAgIC8vIElmIHdlIHJlbW92ZWQgdGhlIGxhc3Qgb3JpZ2luLCBkbyBzb21lIGFkZGl0aW9uYWwg
ZGVsZXRpb24uCi0gICAgICAgIGlmIChtX3F1b3RhTWFwLT5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKGlzRW1wdHkpIHsKICAgICAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQogICAg
ICAgICAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKICAgICAgICAgICAgU1FMaXRlRmlsZVN5
c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFj
a2VyLmgJKHJldmlzaW9uIDE0NTE2NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgaGFzRW50cnlGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbios
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKTsKIAogICAgIGJvb2wgYWRkRGF0YWJh
c2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcGF0
aCk7Ci0gICAgdm9pZCBwb3B1bGF0ZU9yaWdpbnNJZk5lZWRlZCgpOwogCiAgICAgYm9vbCBkZWxl
dGVEYXRhYmFzZUZpbGUoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCkBA
IC0xNTAsMTMgKzE0OSwxMCBAQCBwcml2YXRlOgogICAgIE11dGV4IG1fb3BlbkRhdGFiYXNlTWFw
R3VhcmQ7CiAgICAgbXV0YWJsZSBPd25QdHI8RGF0YWJhc2VPcmlnaW5NYXA+IG1fb3BlbkRhdGFi
YXNlTWFwOwogCi0gICAgLy8gVGhpcyBsb2NrIHByb3RlY3RzIG1fZGF0YWJhc2UsIG1fcXVvdGFN
YXAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBtX29yaWdpbnNCZWluZ0RlbGV0ZWQsIG1fYmVp
bmdDcmVhdGVkLCBhbmQgbV9iZWluZ0RlbGV0ZWQuCisgICAgLy8gVGhpcyBsb2NrIHByb3RlY3Rz
IG1fZGF0YWJhc2UsIG1fb3JpZ2luTG9ja01hcCwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG1f
b3JpZ2luc0JlaW5nRGVsZXRlZCwgbV9iZWluZ0NyZWF0ZWQsIGFuZCBtX2JlaW5nRGVsZXRlZC4K
ICAgICBNdXRleCBtX2RhdGFiYXNlR3VhcmQ7CiAgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFz
ZTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCB1bnNpZ25l
ZCBsb25nIGxvbmc+IFF1b3RhTWFwOwotICAgIG11dGFibGUgT3duUHRyPFF1b3RhTWFwPiBtX3F1
b3RhTWFwOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE9yaWdpbkxvY2s+
ID4gT3JpZ2luTG9ja01hcDsKICAgICBPcmlnaW5Mb2NrTWFwIG1fb3JpZ2luTG9ja01hcDsKIAo=
</data>
<flag name="review"
          id="213845"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>