<?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>174521</bug_id>
          
          <creation_ts>2017-07-14 12:22:42 -0700</creation_ts>
          <short_desc>Monitor directory for new statistics files after a delete operation</short_desc>
          <delta_ts>2017-07-14 15:53:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit 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="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1328935</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-14 12:22:42 -0700</bug_when>
    <thetext>If the ResourceLoadStatistics data file is deleted on disk, we should monitor the data directory to see if a new ones is created by a separate process. If so, we should sync with that data and begin watching the new file for changes.

This replaces the buggy logic I originally wrote that would attempt to sync when we wanted to write to disk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328936</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-07-14 12:23:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/33322189&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328960</commentid>
    <comment_count>2</comment_count>
      <attachid>315478</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-14 13:07:27 -0700</bug_when>
    <thetext>Created attachment 315478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328969</commentid>
    <comment_count>3</comment_count>
      <attachid>315478</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-14 13:24:54 -0700</bug_when>
    <thetext>Comment on attachment 315478
Patch

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

&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:137
&gt; +            monitorDirectoryForNewStatistics();

This is insufficient. You have the same issue when populateMemoryStoreFromDisk() is called and the file does not exist yet.

&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:145
&gt; +    String storagePath = this-&gt;storageDirectoryPath();

Don&apos;t need the the this-&gt;

&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:150
&gt; +        if (m_fileMonitor || type == FileMonitor::FileChangeType::Removal) {

m_fileMonitor being non-null should not be possible?

What does removal mean here. Is this called when the directory gets removed. What if a file was removed in the folder?

&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:163
&gt; +        refreshMemoryStoreFromDisk();

Do we want refreshMemoryStoreFromDisk() or populateMemoryStoreFromDisk() here?

&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.h:68
&gt; +    std::unique_ptr&lt;WebCore::FileMonitor&gt; m_directoryMonitor;

Do we really need a second FileMonitor member, it seems to be m_fileMonitor and m_directoryMonitor are mutually exclusive and we could thus reuse the same member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328975</commentid>
    <comment_count>4</comment_count>
      <attachid>315478</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-14 13:29:41 -0700</bug_when>
    <thetext>Comment on attachment 315478
Patch

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

&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:148
&gt; +    m_directoryMonitor = std::make_unique&lt;FileMonitor&gt;(storagePath, m_memoryStore.statisticsQueue(), [this] (FileMonitor::FileChangeType type) {

What if the folder does not exist yet. You only call makeAllDirectories() when actually writing data to disk at the moment. I think we should probably call makeAllDirectories() here before we start monitoring as well.

&gt;&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:150
&gt;&gt; +        if (m_fileMonitor || type == FileMonitor::FileChangeType::Removal) {
&gt; 
&gt; m_fileMonitor being non-null should not be possible?
&gt; 
&gt; What does removal mean here. Is this called when the directory gets removed. What if a file was removed in the folder?

I looked it up and it looks like we get a DISPATCH_VNODE_WRITE for file additions and removals from the folder. DISPATCH_VNODE_DELETE must mean that the folder has been removed then, in which case I case it is ok to stop monitoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329005</commentid>
    <comment_count>5</comment_count>
      <attachid>315478</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-14 14:36:46 -0700</bug_when>
    <thetext>Comment on attachment 315478
Patch

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

&gt;&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:137
&gt;&gt; +            monitorDirectoryForNewStatistics();
&gt; 
&gt; This is insufficient. You have the same issue when populateMemoryStoreFromDisk() is called and the file does not exist yet.

Oh, good point! I&apos;ll add the call there, too.

&gt;&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:145
&gt;&gt; +    String storagePath = this-&gt;storageDirectoryPath();
&gt; 
&gt; Don&apos;t need the the this-&gt;

Right -- I&apos;ll remove.

&gt;&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:148
&gt;&gt; +    m_directoryMonitor = std::make_unique&lt;FileMonitor&gt;(storagePath, m_memoryStore.statisticsQueue(), [this] (FileMonitor::FileChangeType type) {
&gt; 
&gt; What if the folder does not exist yet. You only call makeAllDirectories() when actually writing data to disk at the moment. I think we should probably call makeAllDirectories() here before we start monitoring as well.

Good idea. I&apos;ll fix that.

&gt;&gt;&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:150
&gt;&gt;&gt; +        if (m_fileMonitor || type == FileMonitor::FileChangeType::Removal) {
&gt;&gt; 
&gt;&gt; m_fileMonitor being non-null should not be possible?
&gt;&gt; 
&gt;&gt; What does removal mean here. Is this called when the directory gets removed. What if a file was removed in the folder?
&gt; 
&gt; I looked it up and it looks like we get a DISPATCH_VNODE_WRITE for file additions and removals from the folder. DISPATCH_VNODE_DELETE must mean that the folder has been removed then, in which case I case it is ok to stop monitoring.

Yes -- that&apos;s right.

I was worried about a case where we are monitoring for an external process, and our own process decides to write a file. Since VNODE events are not filtered by process, we might see our own file create and believe we should take some action. So, if the monitor sees that we are already monitoring a file, it should just exit.

&gt;&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.cpp:163
&gt;&gt; +        refreshMemoryStoreFromDisk();
&gt; 
&gt; Do we want refreshMemoryStoreFromDisk() or populateMemoryStoreFromDisk() here?

I think we want to refresh, since the user might have done some browsing since the file was deleted, but before the current process writes its own content. So we don&apos;t want to lose observations made in the running process just because an external process wrote some data.

&gt;&gt; Source/WebKit/UIProcess/Storage/ResourceLoadStatisticsPersistentStorage.h:68
&gt;&gt; +    std::unique_ptr&lt;WebCore::FileMonitor&gt; m_directoryMonitor;
&gt; 
&gt; Do we really need a second FileMonitor member, it seems to be m_fileMonitor and m_directoryMonitor are mutually exclusive and we could thus reuse the same member.

Yes, I was thinking that might be the case as well. I&apos;ll try that approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329035</commentid>
    <comment_count>6</comment_count>
      <attachid>315495</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-14 15:07:43 -0700</bug_when>
    <thetext>Created attachment 315495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329037</commentid>
    <comment_count>7</comment_count>
      <attachid>315495</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-14 15:14:01 -0700</bug_when>
    <thetext>Comment on attachment 315495
Patch

r=me if the bots are happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329047</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-14 15:52:54 -0700</bug_when>
    <thetext>Committed r219530: &lt;http://trac.webkit.org/changeset/219530&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329050</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-14 15:53:56 -0700</bug_when>
    <thetext>*** Bug 174466 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315478</attachid>
            <date>2017-07-14 13:07:27 -0700</date>
            <delta_ts>2017-07-14 15:07:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174521-20170714130743.patch</filename>
            <type>text/plain</type>
            <size>3630</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTk1MDYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE3LTA3LTE0ICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIE1vbml0b3IgZGlyZWN0b3J5IGZv
ciBuZXcgc3RhdGlzdGljcyBmaWxlcyBhZnRlciBhIGRlbGV0ZSBvcGVyYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDUyMQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMzMzMjIxODk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGEgRmlsZU1vbml0b3IgdG8gd2F0Y2ggdGhlIGRhdGEg
ZGlyZWN0b3J5IHdoZW4gdGhlIHN0YXRpc3RpY3MgZmlsZSBpcworICAgICAgICBkZWxldGVkIGJ5
IGFuIGV4dGVybmFsIHByb2Nlc3MuIElmIGl0IHNlZXMgdGhlIGZpbGUgZ2V0IGNyZWF0ZWQgZXh0
ZXJuYWxseSwgbWVyZ2UKKyAgICAgICAgdGhvc2UgZGF0YSBpbnRvIHRoZSBpbi1tZW1vcnkgc3Rv
cmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0YXJ0TW9uaXRvcmluZ0Rpc2spOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpt
b25pdG9yRGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGljcyk6CisgICAgICAgICogVUlQcm9jZXNzL1N0
b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmg6CisKIDIwMTct
MDctMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBCZXR0ZXIg
ZGVhbCB3aXRoIGNoYW5nZXMgdG8gdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBmaWxl
IG9uIGRpc2sKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZS5jcHAJKHJldmlzaW9uIDIxOTUwNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM0LDExICsxMzQsMzcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGVyc2lzdGVudFN0bwogICAgICAgICBjYXNlIEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlw
ZTo6UmVtb3ZhbDoKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUuY2xlYXJJbk1lbW9yeSgpOwog
ICAgICAgICAgICAgbV9maWxlTW9uaXRvciA9IG51bGxwdHI7CisgICAgICAgICAgICBtb25pdG9y
RGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGljcygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9KTsKIH0KIAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2U6Om1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCkKK3sKKyAgICBTdHJpbmcg
c3RvcmFnZVBhdGggPSB0aGlzLT5zdG9yYWdlRGlyZWN0b3J5UGF0aCgpOworICAgIEFTU0VSVCgh
c3RvcmFnZVBhdGguaXNFbXB0eSgpKTsKKworICAgIG1fZGlyZWN0b3J5TW9uaXRvciA9IHN0ZDo6
bWFrZV91bmlxdWU8RmlsZU1vbml0b3I+KHN0b3JhZ2VQYXRoLCBtX21lbW9yeVN0b3JlLnN0YXRp
c3RpY3NRdWV1ZSgpLCBbdGhpc10gKEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZSB0eXBlKSB7
CisgICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICBpZiAobV9maWxl
TW9uaXRvciB8fCB0eXBlID09IEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZTo6UmVtb3ZhbCkg
eworICAgICAgICAgICAgbV9kaXJlY3RvcnlNb25pdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyByZXNvdXJjZUxvZ1BhdGggPSBy
ZXNvdXJjZUxvZ0ZpbGVQYXRoKCk7CisgICAgICAgIEFTU0VSVCghcmVzb3VyY2VMb2dQYXRoLmlz
RW1wdHkoKSk7CisKKyAgICAgICAgaWYgKCFmaWxlRXhpc3RzKHJlc291cmNlTG9nUGF0aCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9kaXJlY3RvcnlNb25pdG9yID0gbnVsbHB0
cjsKKworICAgICAgICByZWZyZXNoTWVtb3J5U3RvcmVGcm9tRGlzaygpOworICAgICAgICBzdGFy
dE1vbml0b3JpbmdEaXNrKCk7CisgICAgfSk7Cit9CisKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlOjpzdG9wTW9uaXRvcmluZ0Rpc2soKQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3Rv
cmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZS5oCShyZXZpc2lvbiAyMTk1MDYpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHN0YXJ0TW9uaXRvcmluZ0Rpc2soKTsKICAgICB2b2lkIHN0b3BNb25pdG9yaW5nRGlzaygpOwor
ICAgIHZvaWQgbW9uaXRvckRpcmVjdG9yeUZvck5ld1N0YXRpc3RpY3MoKTsKIAogICAgIHZvaWQg
d3JpdGVNZW1vcnlTdG9yZVRvRGlzaygpOwogICAgIHZvaWQgcG9wdWxhdGVNZW1vcnlTdG9yZUZy
b21EaXNrKCk7CkBAIC02NCw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJiBtX21lbW9yeVN0b3JlOwogICAgIGNvbnN0IFN0cmluZyBtX3N0b3Jh
Z2VEaXJlY3RvcnlQYXRoOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWxlTW9uaXRv
cj4gbV9maWxlTW9uaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsZU1vbml0
b3I+IG1fZGlyZWN0b3J5TW9uaXRvcjsKICAgICBXYWxsVGltZSBtX2xhc3RTdGF0aXN0aWNzRmls
ZVN5bmNUaW1lOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0U3RhdGlzdGljc1dyaXRlVGltZTsK
ICAgICBib29sIG1faGFzUGVuZGluZ1dyaXRlIHsgZmFsc2UgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315495</attachid>
            <date>2017-07-14 15:07:43 -0700</date>
            <delta_ts>2017-07-14 15:14:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174521-20170714150759.patch</filename>
            <type>text/plain</type>
            <size>5590</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTk1MDYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE3LTA3LTE0ICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIE1vbml0b3IgZGlyZWN0b3J5IGZv
ciBuZXcgc3RhdGlzdGljcyBmaWxlcyBhZnRlciBhIGRlbGV0ZSBvcGVyYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDUyMQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMzMzMjIxODk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGEgRmlsZU1vbml0b3IgdG8gd2F0Y2ggdGhlIGRhdGEg
ZGlyZWN0b3J5IHdoZW4gdGhlIHN0YXRpc3RpY3MgZmlsZSBpcworICAgICAgICBkZWxldGVkIGJ5
IGFuIGV4dGVybmFsIHByb2Nlc3MuIElmIGl0IHNlZXMgdGhlIGZpbGUgZ2V0IGNyZWF0ZWQgZXh0
ZXJuYWxseSwgbWVyZ2UKKyAgICAgICAgdGhvc2UgZGF0YSBpbnRvIHRoZSBpbi1tZW1vcnkgc3Rv
cmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0YXJ0TW9uaXRvcmluZ0Rpc2spOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpt
b25pdG9yRGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGljcyk6CisgICAgICAgICogVUlQcm9jZXNzL1N0
b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmg6CisKIDIwMTct
MDctMTMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBCZXR0ZXIg
ZGVhbCB3aXRoIGNoYW5nZXMgdG8gdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBmaWxl
IG9uIGRpc2sKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZS5jcHAJKHJldmlzaW9uIDIxOTUwNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGVyc2lzdGVudFMKIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZTo6cmVzb3VyY2VMb2dGaWxlUGF0aCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHN0b3Jh
Z2VQYXRoID0gdGhpcy0+c3RvcmFnZURpcmVjdG9yeVBhdGgoKTsKKyAgICBTdHJpbmcgc3RvcmFn
ZVBhdGggPSBzdG9yYWdlRGlyZWN0b3J5UGF0aCgpOwogICAgIGlmIChzdG9yYWdlUGF0aC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCkBAIC0xMzQsMTEgKzEzNCw0
NSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvCiAgICAgICAgIGNh
c2UgRmlsZU1vbml0b3I6OkZpbGVDaGFuZ2VUeXBlOjpSZW1vdmFsOgogICAgICAgICAgICAgbV9t
ZW1vcnlTdG9yZS5jbGVhckluTWVtb3J5KCk7CiAgICAgICAgICAgICBtX2ZpbGVNb25pdG9yID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIG1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0pOwogfQogCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6bW9uaXRvckRpcmVjdG9yeUZvck5l
d1N0YXRpc3RpY3MoKQoreworICAgIFN0cmluZyBzdG9yYWdlUGF0aCA9IHN0b3JhZ2VEaXJlY3Rv
cnlQYXRoKCk7CisgICAgQVNTRVJUKCFzdG9yYWdlUGF0aC5pc0VtcHR5KCkpOworCisgICAgaWYg
KCFmaWxlRXhpc3RzKHN0b3JhZ2VQYXRoKSkgeworICAgICAgICBpZiAoIW1ha2VBbGxEaXJlY3Rv
cmllcyhzdG9yYWdlUGF0aCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFJlc291
cmNlTG9hZFN0YXRpc3RpY3MsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2U6IEZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5IHBhdGggJXMiLCBzdG9yYWdlUGF0aC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IG1fZmlsZU1vbml0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEZpbGVNb25pdG9yPihzdG9yYWdlUGF0
aCwgbV9tZW1vcnlTdG9yZS5zdGF0aXN0aWNzUXVldWUoKSwgW3RoaXNdIChGaWxlTW9uaXRvcjo6
RmlsZUNoYW5nZVR5cGUgdHlwZSkgeworICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gRmlsZU1vbml0b3I6OkZpbGVDaGFuZ2VUeXBlOjpSZW1v
dmFsKSB7CisgICAgICAgICAgICAvLyBEaXJlY3Rvcnkgd2FzIHJlbW92ZWQhCisgICAgICAgICAg
ICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIFN0cmluZyByZXNvdXJjZUxvZ1BhdGggPSByZXNvdXJjZUxvZ0ZpbGVQYXRo
KCk7CisgICAgICAgIEFTU0VSVCghcmVzb3VyY2VMb2dQYXRoLmlzRW1wdHkoKSk7CisKKyAgICAg
ICAgaWYgKCFmaWxlRXhpc3RzKHJlc291cmNlTG9nUGF0aCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgbV9maWxlTW9uaXRvciA9IG51bGxwdHI7CisKKyAgICAgICAgcmVmcmVzaE1l
bW9yeVN0b3JlRnJvbURpc2soKTsKKyAgICAgICAgc3RhcnRNb25pdG9yaW5nRGlzaygpOworICAg
IH0pOworfQorCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6
c3RvcE1vbml0b3JpbmdEaXNrKCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
QEAgLTE3Nyw2ICsyMTEsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvCiAgICAgU3RyaW5nIGZpbGVQYXRoID0gcmVzb3VyY2VMb2dGaWxlUGF0aCgpOwogICAgIGlm
IChmaWxlUGF0aC5pc0VtcHR5KCkgfHwgIWZpbGVFeGlzdHMoZmlsZVBhdGgpKSB7CiAgICAgICAg
IG1fbWVtb3J5U3RvcmUuZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKCk7CisgICAgICAg
IG1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTIxNCw3ICsyNDksNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvCiAgICAgaWYgKCFyYXdEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IHN0b3JhZ2VQYXRoID0gdGhpcy0+c3RvcmFnZURpcmVjdG9yeVBhdGgoKTsKKyAgICBhdXRvIHN0
b3JhZ2VQYXRoID0gc3RvcmFnZURpcmVjdG9yeVBhdGgoKTsKICAgICBpZiAoIXN0b3JhZ2VQYXRo
LmlzRW1wdHkoKSkgewogICAgICAgICBtYWtlQWxsRGlyZWN0b3JpZXMoc3RvcmFnZVBhdGgpOwog
ICAgICAgICBleGNsdWRlRnJvbUJhY2t1cCgpOwpAQCAtMjI4LDcgKzI2Myw3IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG8KICAgICB1bmxvY2tBbmRDbG9zZUZpbGUo
aGFuZGxlKTsKIAogICAgIGlmICh3cml0dGVuQnl0ZXMgIT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4o
cmF3RGF0YS0+c2l6ZSgpKSkKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTogV2Ugb25seSB3cm90
ZSAlZCBvdXQgb2YgJXp1IGJ5dGVzIHRvIGRpc2siLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4od3Jp
dHRlbkJ5dGVzKSwgcmF3RGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
UmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZTogV2Ugb25seSB3cm90ZSAlZCBvdXQgb2YgJXp1IGJ5dGVzIHRvIGRpc2siLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4od3JpdHRlbkJ5dGVzKSwgcmF3RGF0YS0+c2l6ZSgpKTsKIAogICAg
IG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUgPSBXYWxsVGltZTo6bm93KCk7CiAgICAgbV9s
YXN0U3RhdGlzdGljc1dyaXRlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwpAQCAtMjY1LDcg
KzMwMCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG8KICAgICBz
dG9wTW9uaXRvcmluZ0Rpc2soKTsKIAogICAgIGlmICghZGVsZXRlRmlsZShmaWxlUGF0aCkpCi0g
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJVbmFibGUg
dG8gZGVsZXRlIHN0YXRpc3RpY3MgZmlsZTogJXMiLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIlJlc291
cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTogVW5hYmxlIHRvIGRlbGV0ZSBzdGF0
aXN0aWNzIGZpbGU6ICVzIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpmaW5pc2hBbGxQZW5kaW5nV29y
a1N5bmNocm9ub3VzbHkoKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3RvcmFnZS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZS5oCShyZXZpc2lvbiAyMTk1MDYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN0YXJ0
TW9uaXRvcmluZ0Rpc2soKTsKICAgICB2b2lkIHN0b3BNb25pdG9yaW5nRGlzaygpOworICAgIHZv
aWQgbW9uaXRvckRpcmVjdG9yeUZvck5ld1N0YXRpc3RpY3MoKTsKIAogICAgIHZvaWQgd3JpdGVN
ZW1vcnlTdG9yZVRvRGlzaygpOwogICAgIHZvaWQgcG9wdWxhdGVNZW1vcnlTdG9yZUZyb21EaXNr
KCk7Cg==
</data>
<flag name="review"
          id="336336"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>