<?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>115680</bug_id>
          
          <creation_ts>2013-05-06 15:36:07 -0700</creation_ts>
          <short_desc>More work on LocalStorageDatabaseTracker</short_desc>
          <delta_ts>2013-05-06 22:13:10 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>885482</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-06 15:36:07 -0700</bug_when>
    <thetext>More work on LocalStorageDatabaseTracker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885484</commentid>
    <comment_count>1</comment_count>
      <attachid>200851</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-06 15:41:43 -0700</bug_when>
    <thetext>Created attachment 200851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885488</commentid>
    <comment_count>2</comment_count>
      <attachid>200851</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-06 15:52:05 -0700</bug_when>
    <thetext>Comment on attachment 200851
Patch

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

r=me

&gt; Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp:96
&gt; +    if (!fileExists(databasePath) &amp;&amp; openingStrategy == SkipIfNonExistent)
&gt; +        return;
&gt; +
&gt; +    if (!m_database.open(databasePath)) {
&gt; +        LOG_ERROR(&quot;Failed to open databasePath %s.&quot;, databasePath.ascii().data());
&gt; +        return;
&gt; +    }

There&apos;s a race between checking if the file exists and opening it. Looks a bit shoddy.

&gt; Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp:98
&gt; +    m_database.disableThreadingChecks();

This needs a comment.

&gt; Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp:111
&gt; +    openTrackerDatabase(SkipIfNonExistent);
&gt; +
&gt; +    if (m_database.isOpen()) {

I&apos;d make openTrackerDatabase() return a bool for success and branch on that instead.

&gt; Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp:129
&gt; +    updateTrackerDatabaseFromLocalStorageDatabaseFiles();

Should we still be doing this if opening the database failed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885490</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-06 16:02:40 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 200851 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=200851&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp:96
&gt; &gt; +    if (!fileExists(databasePath) &amp;&amp; openingStrategy == SkipIfNonExistent)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    if (!m_database.open(databasePath)) {
&gt; &gt; +        LOG_ERROR(&quot;Failed to open databasePath %s.&quot;, databasePath.ascii().data());
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; There&apos;s a race between checking if the file exists and opening it. Looks a bit shoddy.

OK. What can happen is that the database is deleted between the call to fileExists and in that case it’ll be re-created by the call to Database::open.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp:129
&gt; &gt; +    updateTrackerDatabaseFromLocalStorageDatabaseFiles();
&gt; 
&gt; Should we still be doing this if opening the database failed?

It’ll still update the oh-so-important in-process data structures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885492</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-06 16:05:28 -0700</bug_when>
    <thetext>Committed r149647: &lt;http://trac.webkit.org/changeset/149647&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885598</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-05-06 21:55:31 -0700</bug_when>
    <thetext>It appears that this patch broke WK2 bots:
http://build.webkit.org/builders/Apple%20MountainLion%20Debug%20WK2%20%28Tests%29?numbuilds=50

e.g.
16:33:53.229 46880 worker/1 accessibility/accessibility-node-memory-management.html crashed, (stderr lines):
16:33:53.229 46880   ASSERTION FAILED: !m_localStorageDirectory
16:33:53.229 46880   /Volumes/Data/slave/mountainlion-debug/build/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp(65) : void WebKit::LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal(const WTF::String &amp;)
16:33:53.229 46880   1   0x10b985093 WebKit::LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal(WTF::String const&amp;)
16:33:53.229 46880   2   0x10b98639a WTF::FunctionWrapper&lt;void (WebKit::LocalStorageDatabaseTracker::*)(WTF::String const&amp;)&gt;::operator()(WebKit::LocalStorageDatabaseTracker*, WTF::String const&amp;)
16:33:53.229 46880   3   0x10b98630c WTF::BoundFunctionImpl&lt;WTF::FunctionWrapper&lt;void (WebKit::LocalStorageDatabaseTracker::*)(WTF::String const&amp;)&gt;, void (WebKit::LocalStorageDatabaseTracker*, WTF::String)&gt;::operator()()
16:33:53.229 46880   4   0x10b6e3939 WTF::Function&lt;void ()&gt;::operator()() const
16:33:53.229 46880   5   0x10bb18be1 __dispatch_block_invoke_0
16:33:53.229 46880   6   0x7fff8c62bf01 _dispatch_call_block_and_release
16:33:53.229 46880   7   0x7fff8c6280b6 _dispatch_client_callout
16:33:53.229 46880   8   0x7fff8c62947f _dispatch_queue_drain
16:33:53.229 46880   9   0x7fff8c6292f1 _dispatch_queue_invoke
16:33:53.229 46880   10  0x7fff8c6291c3 _dispatch_worker_thread2
16:33:53.229 46880   11  0x7fff8d7f2d0b _pthread_wqthread
16:33:53.229 46880   12  0x7fff8d7dd1d1 start_wqthread

I can reproduce this crash locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885604</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-05-06 22:13:10 -0700</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=115711 to track the assertion failure.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200851</attachid>
            <date>2013-05-06 15:41:43 -0700</date>
            <delta_ts>2013-05-06 15:52:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115680-20130506154050.patch</filename>
            <type>text/plain</type>
            <size>9473</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5NjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjAxMTgxZTE2OWIzZjJk
MGNkMDc4OTNjMjUzNGMzNjQ5NGVkZjY4Yi4uNzNiZTIxMmMxOWYyMTBhMjY3MWJkMDMxNzgyZWZm
MmU2ZGU1YTUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA1LTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW9yZSB3b3JrIG9u
IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1NjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IHN5bWJvbHMgbmVlZGVkIGJ5IFdlYktpdDIuCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKwogMjAxMy0wNS0wNiAgTWFudWVsIFJlZ28gQ2Fz
YXNub3ZhcyAgPHJlZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQgd2Via2l0X3Vy
aV9zY2hlbWVfcmVxdWVzdF9maW5pc2hfZXJyb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzZDllNmZmZDE3MDQz
YmU4ZTI4NGMyMjE4YmIwMDRmMjkyOGQ0YzVjLi5hNzdhZGVhNThiYTgxMzRiMzBjYTg1N2FkMjg2
NTdiNDExNzY5NWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzQgQEAKIDIwMTMtMDUtMDYgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAorICAgICAgICBNb3JlIHdvcmsg
b24gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU2ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6ZGF0YWJhc2VGaWxlbmFtZSk6CisgICAgICAgIENhbGwgdGhlIG5ldyBkYXRhYmFz
ZUZpbGVuYW1lIHRoYXQgdGFrZXMgYSBzdHJpbmcuCisKKyAgICAgICAgKFdlYktpdDo6TG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyOjpzZXRMb2NhbFN0b3JhZ2VEaXJlY3RvcnlJbnRlcm5hbCk6
CisgICAgICAgIEFzc2VydCB0aGF0IHdlIGRvbid0IGNhbGwgdGhpcyBtb3JlIHRoYW4gb25jZS4g
RGlzcGF0Y2ggYSBjYWxsIHRvIGltcG9ydCBvcmlnaW4gaWRlbnRpZmllcnMuCisKKyAgICAgICAg
KFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRo
KToKKyAgICAgICAgTmV3IGhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRyYWNrZXIg
ZGF0YWJhc2UgcGF0aC4KKworICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UpOgorICAgICAgICBPcGVuIHRoZSBkYXRhYmFzZSBh
bmQgY3JlYXRlIHRoZSBPcmlnaW5zIHRhYmxlIGlmIG5lZWRlZC4KKworICAgICAgICAoV2ViS2l0
OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmltcG9ydE9yaWdpbklkZW50aWZpZXJzKToK
KyAgICAgICAgT3BlbiB0aGUgZGF0YWJhc2UgYW5kIGltcG9ydCB0aGUgb3JpZ2luIGlkZW50aWZp
ZXJzIGZyb20gaXQsIHRoZW4gc3luY2hyb25pemUgaXQgd2l0aCB3aGF0ZXZlciBmaWxlcyBhcmUg
b24gZGlzay4KKworICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6
OnVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZyb21Mb2NhbFN0b3JhZ2VEYXRhYmFzZUZpbGVzKToKKyAg
ICAgICAgQnJpbmcgdGhlIHRyYWNrZXIgZGF0YWJhc2UgdXAgdG8gZGF0ZSBmcm9tIHRoZSBkYXRh
YmFzZSBmaWxlcyBvbiBkaXNrLgorCisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2UvTG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgIChMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXIpOgorCisyMDEzLTA1LTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CisKICAgICAgICAgTW92ZSBsb2NhbCBzdG9yYWdlIGRpcmVjdG9yeSBoYW5kbGluZyB0byBM
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExNTY3NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDA3ZjQ1
YWYzN2JkMDEyZDdjNGE0OTQ4ZDAzYzk4ODI1OWRkNmI5MzMuLjQ4MGRiY2VmZmI4ODMwMmY0YWU0
ZmYyZDYzYjNkODg0Y2ZkNDY5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yODAsNiArMjgw
LDcgQEAgX19aTjdXZWJDb3JlMTNTdHlsZWRFbGVtZW50MjJzZXRJbmxpbmVTdHlsZVByb3BlcnR5
RU5TXzEzQ1NTUHJvcGVydHlJREVkTlNfMTdDU1MKIF9fWk43V2ViQ29yZTEzY29va2llc0ZvckRP
TUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfNEtVUkxFUzVfCiBfX1pON1dlYkNv
cmUxM2NyZWF0ZVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVj
dEVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxM2RpcmVjdG9yeU5hbWVFUktOM1dURjZTdHJpbmdF
CitfX1pON1dlYkNvcmUxM2xpc3REaXJlY3RvcnlFUktOM1dURjZTdHJpbmdFUzNfCiBfX1pON1dl
YkNvcmUxM3BvaW50ZXJDdXJzb3JFdgogX19aTjdXZWJDb3JlMTN0b0FycmF5QnVmZmVyRU4zSlND
N0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxM3RvSFRNTEVsZW1lbnRFUE5TXzIxRm9ybUFzc29jaWF0
ZWRFbGVtZW50RQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2Uv
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9TdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAKaW5kZXggY2IwZTlhMWRk
NGVhYmRkOWJhN2VhN2FlYjkwMzUwNzYxYmM4NDQyMS4uMDBmYzEzYzFiMTY2ZGY1MmY5YmNlNTc5
OTlhOWI0ZWYyMmRkMzhhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0
b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Zp
bGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKQEAgLTU2LDE3ICs1NywxMDcgQEAgdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXI6OnNldExvY2FsU3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGxvY2FsU3QKIAogU3Ry
aW5nIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VGaWxlbmFtZShTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pIGNvbnN0CiB7CisgICAgcmV0dXJuIGRhdGFiYXNlRmls
ZW5hbWUoc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKK30KKwordm9pZCBM
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OnNldExvY2FsU3RvcmFnZURpcmVjdG9yeUludGVy
bmFsKGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQoreworICAgIEFTU0VSVCgh
bV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOworICAgIG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
bG9jYWxTdG9yYWdlRGlyZWN0b3J5OworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goYmluZCgmTG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjppbXBvcnRPcmlnaW5JZGVudGlmaWVycywgdGhpcykp
OworfQorCitTdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZUZpbGVu
YW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpIGNvbnN0Cit7CiAgICAgaWYgKCFtYWtlQWxsRGly
ZWN0b3JpZXMobV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpKSB7CiAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlZCB0byBjcmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBtX2xvY2Fs
U3RvcmFnZURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogICAgIH0KIAotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9sb2NhbFN0
b3JhZ2VEaXJlY3RvcnksIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIu
bG9jYWxzdG9yYWdlIik7CisgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2xv
Y2FsU3RvcmFnZURpcmVjdG9yeSwgZmlsZW5hbWUpOwogfQogCi12b2lkIExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcjo6c2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5SW50ZXJuYWwoY29uc3QgU3Ry
aW5nJiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCitTdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkgY29uc3QKIHsKLSAgICBtX2xvY2FsU3RvcmFn
ZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKKyAgICByZXR1cm4gZGF0YWJhc2VG
aWxlbmFtZSgiU3RvcmFnZVRyYWNrZXIuZGIiKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kg
b3BlbmluZ1N0cmF0ZWd5KQoreworICAgIFN0cmluZyBkYXRhYmFzZVBhdGggPSB0cmFja2VyRGF0
YWJhc2VQYXRoKCk7CisKKyAgICBpZiAoIWZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoKSAmJiBvcGVu
aW5nU3RyYXRlZ3kgPT0gU2tpcElmTm9uRXhpc3RlbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZVBhdGggJXMuIiwgZGF0YWJhc2VQYXRoLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZGF0YWJhc2UuZGlzYWJs
ZVRocmVhZGluZ0NoZWNrcygpOworCisgICAgaWYgKG1fZGF0YWJhc2UudGFibGVFeGlzdHMoIk9y
aWdpbnMiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVD
b21tYW5kKCJDUkVBVEUgVEFCTEUgT3JpZ2lucyAob3JpZ2luIFRFWFQgVU5JUVVFIE9OIENPTkZM
SUNUIFJFUExBQ0UsIHBhdGggVEVYVCk7IikpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSBPcmlnaW5zIHRhYmxlLiIpOworfQorCit2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKQoreworICAgIG9wZW5UcmFja2VyRGF0
YWJhc2UoU2tpcElmTm9uRXhpc3RlbnQpOworCisgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkp
IHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNU
IG9yaWdpbiBGUk9NIE9yaWdpbnMiKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBh
cmUgc3RhdGVtZW50LiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaW50IHJlc3VsdDsKKworICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCkpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgICAgIG1fb3JpZ2lucy5hZGQoc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9u
ZSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lu
cyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZyb21Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZUZpbGVzKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjp1cGRhdGVU
cmFja2VyRGF0YWJhc2VGcm9tTG9jYWxTdG9yYWdlRGF0YWJhc2VGaWxlcygpCit7CisgICAgVmVj
dG9yPFN0cmluZz4gcGF0aHMgPSBsaXN0RGlyZWN0b3J5KG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5
LCAiKi5sb2NhbHN0b3JhZ2UiKTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiBvcmlnaW5zKG1fb3Jp
Z2lucyk7CisgICAgSGFzaFNldDxTdHJpbmc+IG9yaWdpbnNGcm9tTG9jYWxTdG9yYWdlRGF0YWJh
c2VGaWxlczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0aHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gcGF0aHNbaV07CisKKyAgICAgICAgaWYg
KCFwYXRoLmVuZHNXaXRoKCIubG9jYWxzdG9yYWdlIikpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CisKKyAg
ICAgICAgU3RyaW5nIG9yaWdpbklkZW50aWZpZXIgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMCwgZmls
ZW5hbWUubGVuZ3RoKCkgLSBzdHJsZW4oIi5sb2NhbHN0b3JhZ2UiKSk7CisKKyAgICAgICAgLy8g
RklYTUU6IEluc2VydCB0aGUgb3JpZ2luIGFuZCBkYXRhYmFzZSBwYWlyLgorICAgICAgICBvcmln
aW5zRnJvbUxvY2FsU3RvcmFnZURhdGFiYXNlRmlsZXMuYWRkKG9yaWdpbklkZW50aWZpZXIpOwor
ICAgIH0KKworICAgIGZvciAoYXV0byBpdCA9IG9yaWdpbnMuYmVnaW4oKSwgZW5kID0gb3JpZ2lu
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllciA9ICppdDsKKyAgICAgICAgaWYgKG9yaWdpbnMuY29udGFpbnMob3JpZ2luSWRl
bnRpZmllcikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGlzIG9yaWdp
biBkb2Vzbid0IGhhdmUgYSBkYXRhYmFzZSBmaWxlLCBkZWxldGUgaXQgZnJvbSB0aGUgZGF0YWJh
c2UuCisgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzLgorICAgIH0KIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9M
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9T
dG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oCmluZGV4IDlmZDk1NjhlNTY2NTIx
ZjYyMDczYjdkYjZiNDQ5ODVmYWVhNGQ2YTIuLmQ2ZTYyYjhjOGRmMTQzMmFkMTJlYjYyMTYxNGNj
MDRkYzFhZThiMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdl
L0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9TdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw5ICsyNiwxMiBA
QAogI2lmbmRlZiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXJfaAogI2RlZmluZSBMb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXJfaAogCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFz
ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw5ICs1NSwy
MyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRMb2NhbFN0b3JhZ2VEaXJlY3RvcnlJbnRlcm5h
bChjb25zdCBTdHJpbmcmKTsKIAotICAgIFJlZlB0cjxXb3JrUXVldWU+IG1fcXVldWU7CisgICAg
U3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgU3RyaW5n
IHRyYWNrZXJEYXRhYmFzZVBhdGgoKSBjb25zdDsKKworICAgIGVudW0gRGF0YWJhc2VPcGVuaW5n
U3RyYXRlZ3kgeworICAgICAgICBDcmVhdGVJZk5vbkV4aXN0ZW50LAorICAgICAgICBTa2lwSWZO
b25FeGlzdGVudAorICAgIH07CisgICAgdm9pZCBvcGVuVHJhY2tlckRhdGFiYXNlKERhdGFiYXNl
T3BlbmluZ1N0cmF0ZWd5KTsKKworICAgIHZvaWQgaW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsK
KyAgICB2b2lkIHVwZGF0ZVRyYWNrZXJEYXRhYmFzZUZyb21Mb2NhbFN0b3JhZ2VEYXRhYmFzZUZp
bGVzKCk7CiAKKyAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX3F1ZXVlOwogICAgIFN0cmluZyBtX2xv
Y2FsU3RvcmFnZURpcmVjdG9yeTsKKworICAgIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0
YWJhc2U7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fb3JpZ2luczsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="222128"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>