<?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>50996</bug_id>
          
          <creation_ts>2010-12-13 17:12:15 -0800</creation_ts>
          <short_desc>Consider disabling DNS prefetch when proxy is used</short_desc>
          <delta_ts>2010-12-16 15:39:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>321564</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-13 17:12:15 -0800</bug_when>
    <thetext>DNS prefetching increases load on proxies, confuses certain enterprise security systems, and possibly even causes pages load failures due to overwhelming proxies.

Benefit from DNS prefetch is limited with SOCKSv5 or HTTP proxies, because WebKit will talk to a proxy server, and not to the actual host (I believe that names are still resolved on the client with SOCKSv4). When inside a corporate network, DNS may well return incorrect results, poisoning client DNS cache due to DNS prefetch.

See also: &lt;https://bugzilla.mozilla.org/show_bug.cgi?id=507578&gt;.

&lt;rdar://problem/8098862&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321566</commentid>
    <comment_count>1</comment_count>
      <attachid>76471</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-13 17:21:31 -0800</bug_when>
    <thetext>Created attachment 76471
proposed patch

I&apos;m not sure if this can affect page load speed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322361</commentid>
    <comment_count>2</comment_count>
      <attachid>76471</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-14 17:03:25 -0800</bug_when>
    <thetext>Comment on attachment 76471
proposed patch

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

The comments and function names make it seem like this function can detect all proxies. But there is a whole class of “transparent proxies” that will not be detected. The function names could be more precise.

While I’m saying review+ here, I think you need to do something to be sure this does not slow down web browsing. So you could also consider it a review-.

&gt; WebCore/platform/network/cf/DNSCFNet.cpp:166
&gt; +    // The proxy is enabled if the key is present and the associated value is nonzero.

Don’t you need to use CFNumberGetValue instead? Is comparing a CFNumber of 0 a good enough way to check? CFNumberGetValue does some conversion.

&gt; WebCore/platform/network/cf/DNSCFNet.cpp:176
&gt; +    RetainPtr&lt;CFDictionaryRef&gt; proxySettings(AdoptCF, CFNetworkCopySystemProxySettings());

It seems to me that we should not be calling CFNetworkCopySystemProxySettings so many times. Calling it every single time we consider prefetching the hostname seems likely to be slow. We should either prove it’s not slow or do something to make sure we’re not affected.

It’s ironic to cache the CFNumber of 0, but not the result here.

One way to do this is to subscribe to the “network configuration changed” notification and clear the “proxy is enabled” cache only when we get that notification.

&gt; WebCore/platform/network/cf/DNSCFNet.cpp:198
&gt; +    // Don&apos;t do DNS prefetch is proxies are involved. For many proxy types, the user agent is never exposed
&gt; +    // to the IP address during normal operation, and the address returned by an internal DNS server
&gt; +    // may be incorrect.

This comment does not seem explicit enough. You say that the address returned by the DNS server may be incorrect, but that doesn’t state why that means that prefetch is therefore not helpful. The reader is left to “connect the dots”. I suggest you state the reason for the policy a little more explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322387</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-14 17:32:26 -0800</bug_when>
    <thetext>&gt; One way to do this is to subscribe to the “network configuration changed” notification

I couldn&apos;t find one that would be available on Windows - do you know of such?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322418</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-14 18:14:51 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; One way to do this is to subscribe to the “network configuration changed” notification
&gt; 
&gt; I couldn&apos;t find one that would be available on Windows - do you know of such?

No, I overlooked Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322888</commentid>
    <comment_count>5</comment_count>
      <attachid>76700</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-15 15:39:39 -0800</bug_when>
    <thetext>Created attachment 76700
updated patch

&gt; Don’t you need to use CFNumberGetValue instead? Is comparing a CFNumber of 0 a good enough way to check? CFNumberGetValue does some conversion.

When checking that, I came to the conclusion that we can&apos;t second-guess CFNetwork here. The logic is much more complicated - for example, an *Enabled key can be missing altogether if there are keys for port and host.

So, I changed the code to use a CFNetwork API.

&gt; We should either prove it’s not slow or do something to make sure we’re not affected.

This worries me, too.

Shark sees the proxyIsEnabledInSystemPreferences(), but on one sample out of 6500. I&apos;ve also made the check happen later, as the queue coalesces identical requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322998</commentid>
    <comment_count>6</comment_count>
      <attachid>76700</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-15 18:31:17 -0800</bug_when>
    <thetext>Comment on attachment 76700
updated patch

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

&gt; WebCore/platform/network/cf/DNSCFNet.cpp:89
&gt; +    RetainPtr&lt;CFArrayRef&gt; httpProxyArray = CFNetworkCopyProxiesForURL(httpCFURL, proxySettings.get());
&gt; +    RetainPtr&lt;CFArrayRef&gt; httpsProxyArray = CFNetworkCopyProxiesForURL(httpsCFURL, proxySettings.get());

You need to adopt here since it’s a “copy”-style function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323240</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-16 10:05:23 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/74197&gt;.

&gt; You need to adopt here since it’s a “copy”-style function.

Oops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323475</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-16 15:39:21 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74197 might have broken Leopard Intel Debug (Tests)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76471</attachid>
            <date>2010-12-13 17:21:31 -0800</date>
            <delta_ts>2010-12-15 15:39:39 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>DNSPrefetchAndProxies.txt</filename>
            <type>text/plain</type>
            <size>2928</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mzk4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMTItMTMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwOTk2CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84MDg2NzE4PiBDb25zaWRlciBkaXNhYmxpbmcgRE5TIHByZWZldGNoIHdo
ZW4gcHJveHkgaXMgdXNlZAorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY2Fubm90IHRlc3QgRE5T
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwcm94eUlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpwcmVmZXRjaERO
Uyk6CisKIDIwMTAtMTItMTMgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSdWJiZXItc3RhbXBlZCBieSBKb24gSG9uZXljdXR0LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwCShyZXZpc2lvbiA3MzkyNCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDEwIEBACiAjaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCiAjZW5kaWYKIAorI2lmIGRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyNp
bmNsdWRlIDxTeXN0ZW1Db25maWd1cmF0aW9uL1N5c3RlbUNvbmZpZ3VyYXRpb24uaD4KKyNlbmRp
ZgorCiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXZhaWxh
YmxlIG9uIFRpZ2VyLCBidXQgbm90IGRlY2xhcmVkIGluIHRoZSBDRlJ1bkxvb3AuaCBoZWFkZXIg
b24gVGlnZXIuCiBleHRlcm4gIkMiIENGUnVuTG9vcFJlZiBDRlJ1bkxvb3BHZXRNYWluKCk7CkBA
IC0xNTcsMTEgKzE2MSw0NCBAQCB2b2lkIEROU1Jlc29sdmVRdWV1ZTo6cmVzb2x2ZShjb25zdCBT
dHJpCiAgICAgaG9zdC5yZWxlYXNlUmVmKCk7IC8vIFRoZSBob3N0IHdpbGwgYmUgcmVsZWFzZWQg
ZnJvbSBjbGllbnRDYWxsYmFjaygpLgogfQogCitzdGF0aWMgYm9vbCBwcm94eUlzRW5hYmxlZChD
RkRpY3Rpb25hcnlSZWYgcHJveHlTZXR0aW5ncywgQ0ZTdHJpbmdSZWYga2V5KQoreworICAgIC8v
IFRoZSBwcm94eSBpcyBlbmFibGVkIGlmIHRoZSBrZXkgaXMgcHJlc2VudCBhbmQgdGhlIGFzc29j
aWF0ZWQgdmFsdWUgaXMgbm9uemVyby4KKyAgICBpbnQgemVybyA9IDA7CisgICAgc3RhdGljIENG
TnVtYmVyUmVmIG51bWJlclplcm8gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmemVybyk7CisgICAgQ0ZUeXBlUmVmIHZhbHVlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
eHlTZXR0aW5ncywga2V5KTsKKyAgICByZXR1cm4gdmFsdWUgJiYgIUNGRXF1YWwodmFsdWUsIG51
bWJlclplcm8pOworfQorCitzdGF0aWMgYm9vbCBwcm94eUlzRW5hYmxlZCgpCit7CisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBwcm94eVNldHRpbmdzKEFkb3B0Q0YsIENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdz
KCkpOworI2Vsc2UKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eVNldHRpbmdz
KEFkb3B0Q0YsIFNDRHluYW1pY1N0b3JlQ29weVByb3hpZXMoMCkpOworI2VuZGlmCisgICAgaWYg
KCFwcm94eVNldHRpbmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcHJv
eHlJc0VuYWJsZWQocHJveHlTZXR0aW5ncy5nZXQoKSwgQ0ZTVFIoIkhUVFBFbmFibGUiKSkKKyAg
ICAgICAgfHwgcHJveHlJc0VuYWJsZWQocHJveHlTZXR0aW5ncy5nZXQoKSwgQ0ZTVFIoIkhUVFBT
RW5hYmxlIikpCisgICAgICAgIHx8IHByb3h5SXNFbmFibGVkKHByb3h5U2V0dGluZ3MuZ2V0KCks
IENGU1RSKCJTT0NLU0VuYWJsZSIpKQorICAgICAgICB8fCBwcm94eUlzRW5hYmxlZChwcm94eVNl
dHRpbmdzLmdldCgpLCBDRlNUUigiUHJveHlBdXRvQ29uZmlnRW5hYmxlIikpCisgICAgICAgIHx8
IHByb3h5SXNFbmFibGVkKHByb3h5U2V0dGluZ3MuZ2V0KCksIENGU1RSKCJQcm94eUF1dG9EaXNj
b3ZlcnlFbmFibGUiKSk7Cit9CisKIHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmIChob3N0bmFtZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKKworICAgIC8vIERvbid0IGRvIEROUyBwcmVmZXRj
aCBpcyBwcm94aWVzIGFyZSBpbnZvbHZlZC4gRm9yIG1hbnkgcHJveHkgdHlwZXMsIHRoZSB1c2Vy
IGFnZW50IGlzIG5ldmVyIGV4cG9zZWQKKyAgICAvLyB0byB0aGUgSVAgYWRkcmVzcyBkdXJpbmcg
bm9ybWFsIG9wZXJhdGlvbiwgYW5kIHRoZSBhZGRyZXNzIHJldHVybmVkIGJ5IGFuIGludGVybmFs
IEROUyBzZXJ2ZXIKKyAgICAvLyBtYXkgYmUgaW5jb3JyZWN0LgorICAgIGlmIChwcm94eUlzRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBETlNSZXNvbHZlUXVldWU6OnNoYXJlZCgp
LmFkZChob3N0bmFtZSk7CiB9CiAK
</data>
<flag name="review"
          id="67416"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76700</attachid>
            <date>2010-12-15 15:39:39 -0800</date>
            <delta_ts>2010-12-15 18:31:16 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>DNSPrefetchAndProxies2.txt</filename>
            <type>text/plain</type>
            <size>4588</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDE0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMTItMTUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwOTk2CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84MDg2NzE4PiBDb25zaWRlciBkaXNhYmxpbmcgRE5TIHByZWZldGNoIHdo
ZW4gcHJveHkgaXMgdXNlZAorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY2Fubm90IHRlc3QgRE5T
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwcm94eUlzRW5hYmxlZEluU3lzdGVtUHJlZmVyZW5jZXMpOiBDaGVjayBpZiBh
Y2Nlc3NpbmcgZXhhbXBsZS5jb20gaXMgZ29pbmcgdG8gdXNlCisgICAgICAgIGEgcHJveHkuIFRo
aXMgaXMgb25seSBhbiBlc3RpbWF0ZSAtIGV2ZW4gd2l0aCBhIHByb3h5IGlzIGNvbmZpZ3VyZWQg
aW4gc3lzdGVtIHByZWZlcmVuY2VzLCBhbgorICAgICAgICBhY3R1YWwgcmVxdWVzdCBjYW4gZ28g
ZGlyZWN0bHkgdG8gdGhlIGhvc3QgaWYgYSBQQUMgc2NyaXB0IHNheXMgc28uCisgICAgICAgIChX
ZWJDb3JlOjpETlNSZXNvbHZlUXVldWU6OmFkZCk6IENoZWNrIGlmIHByb3h5IGlzIGVuYWJsZWQg
d2hlbiBzZW5kaW5nIGltbWVkaWF0ZSByZXF1ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OkROU1Jl
c29sdmVRdWV1ZTo6ZmlyZWQpOiBEaXR0byB3aGVuIHNlbmRpbmcgcXVldWVkIG9uZXMuCisKIDIw
MTAtMTItMTUgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL0ROU0NGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvRE5TQ0ZOZXQuY3BwCShyZXZpc2lvbiA3MzkyNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9ETlNDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJETlMuaCIKIAorI2luY2x1ZGUgIktVUkwuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgpAQCAtMzcsNiArMzgsMTAgQEAKICNpbmNsdWRlICJMb2FkZXJSdW5M
b29wQ0YuaCIKICNlbmRpZgogCisjaWYgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorI2lu
Y2x1ZGUgPFN5c3RlbUNvbmZpZ3VyYXRpb24vU3lzdGVtQ29uZmlndXJhdGlvbi5oPgorI2VuZGlm
CisKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogLy8gVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFi
bGUgb24gVGlnZXIsIGJ1dCBub3QgZGVjbGFyZWQgaW4gdGhlIENGUnVuTG9vcC5oIGhlYWRlciBv
biBUaWdlci4KIGV4dGVybiAiQyIgQ0ZSdW5Mb29wUmVmIENGUnVuTG9vcEdldE1haW4oKTsKQEAg
LTYyLDYgKzY3LDM3IEBAIGNvbnN0IGludCBtYXhSZXF1ZXN0c1RvUXVldWUgPSA2NDsKIC8vIElm
IHRoZXJlIHdlcmUgcXVldWVkIG5hbWVzIHRoYXQgY291bGRuJ3QgYmUgc2VudCBzaW11bHRhbmVv
dXNseSwgY2hlY2sgdGhlIHN0YXRlIG9mIHJlc29sdmVycyBhZnRlciB0aGlzIGRlbGF5LgogY29u
c3QgZG91YmxlIHJldHJ5UmVzb2x2aW5nSW5TZWNvbmRzID0gMC4xOwogCitzdGF0aWMgYm9vbCBw
cm94eUlzRW5hYmxlZEluU3lzdGVtUHJlZmVyZW5jZXMoKQoreworICAgIC8vIERvbid0IGRvIERO
UyBwcmVmZXRjaCBpcyBwcm94aWVzIGFyZSBpbnZvbHZlZC4gRm9yIG1hbnkgcHJveHkgdHlwZXMs
IHRoZSB1c2VyIGFnZW50IGlzIG5ldmVyIGV4cG9zZWQKKyAgICAvLyB0byB0aGUgSVAgYWRkcmVz
cyBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4gUXVlcnlpbmcgYW4gaW50ZXJuYWwgRE5TIHNlcnZl
ciBtYXkgbm90IGhlbHAgcGVyZm9ybWFuY2UsCisgICAgLy8gYXMgaXQgZG9lc24ndCBuZWNlc3Nh
cmlseSBsb29rIHVwIHRoZSBhY3R1YWwgZXh0ZXJuYWwgSVAuIEFsc28sIGlmIEROUyByZXR1cm5z
IGEgZmFrZSBpbnRlcm5hbCBhZGRyZXNzLAorICAgIC8vIGxvY2FsIGNhY2hlcyBtYXkga2VlcCBp
dCBldmVuIGFmdGVyIHJlLWNvbm5lY3RpbmcgdG8gYW5vdGhlciBuZXR3b3JrLgorCisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBwcm94eVNldHRpbmdzKEFkb3B0Q0YsIENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdz
KCkpOworI2Vsc2UKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eVNldHRpbmdz
KEFkb3B0Q0YsIFNDRHluYW1pY1N0b3JlQ29weVByb3hpZXMoMCkpOworI2VuZGlmCisgICAgaWYg
KCFwcm94eVNldHRpbmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgQ0ZV
UkxSZWYgaHR0cENGVVJMID0gS1VSTChQYXJzZWRVUkxTdHJpbmcsICJodHRwOi8vZXhhbXBsZS5j
b20vIikuY3JlYXRlQ0ZVUkwoKTsKKyAgICBzdGF0aWMgQ0ZVUkxSZWYgaHR0cHNDRlVSTCA9IEtV
UkwoUGFyc2VkVVJMU3RyaW5nLCAiaHR0cHM6Ly9leGFtcGxlLmNvbS8iKS5jcmVhdGVDRlVSTCgp
OworCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGh0dHBQcm94eUFycmF5ID0gQ0ZOZXR3b3Jr
Q29weVByb3hpZXNGb3JVUkwoaHR0cENGVVJMLCBwcm94eVNldHRpbmdzLmdldCgpKTsKKyAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gaHR0cHNQcm94eUFycmF5ID0gQ0ZOZXR3b3JrQ29weVByb3hp
ZXNGb3JVUkwoaHR0cHNDRlVSTCwgcHJveHlTZXR0aW5ncy5nZXQoKSk7CisKKyAgICBDRkluZGV4
IGh0dHBQcm94eUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGh0dHBQcm94eUFycmF5LmdldCgpKTsK
KyAgICBDRkluZGV4IGh0dHBzUHJveHlDb3VudCA9IENGQXJyYXlHZXRDb3VudChodHRwc1Byb3h5
QXJyYXkuZ2V0KCkpOworICAgIGlmIChodHRwUHJveHlDb3VudCA9PSAxICYmIENGRXF1YWwoQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0
VmFsdWVBdEluZGV4KGh0dHBQcm94eUFycmF5LmdldCgpLCAwKSksIGtDRlByb3h5VHlwZUtleSks
IGtDRlByb3h5VHlwZU5vbmUpKQorICAgICAgICBodHRwUHJveHlDb3VudCA9IDA7CisgICAgaWYg
KGh0dHBzUHJveHlDb3VudCA9PSAxICYmIENGRXF1YWwoQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGh0dHBzUHJv
eHlBcnJheS5nZXQoKSwgMCkpLCBrQ0ZQcm94eVR5cGVLZXkpLCBrQ0ZQcm94eVR5cGVOb25lKSkK
KyAgICAgICAgaHR0cHNQcm94eUNvdW50ID0gMDsKKworICAgIHJldHVybiBodHRwUHJveHlDb3Vu
dCB8fCBodHRwc1Byb3h5Q291bnQ7Cit9CisKIGNsYXNzIEROU1Jlc29sdmVRdWV1ZSA6IHB1Ymxp
YyBUaW1lckJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBETlNSZXNvbHZlUXVldWUmIHNoYXJl
ZCgpOwpAQCAtOTIsNiArMTI4LDkgQEAgdm9pZCBETlNSZXNvbHZlUXVldWU6OmFkZChjb25zdCBT
dHJpbmcmIAogewogICAgIC8vIElmIHRoZXJlIGFyZSBubyBuYW1lcyBxdWV1ZWQsIGFuZCBmZXcg
ZW5vdWdoIGFyZSBpbiBmbGlnaHQsIHJlc29sdmUgaW1tZWRpYXRlbHkgKHRoZSBtb3VzZSBtYXkg
YmUgb3ZlciBhIGxpbmspLgogICAgIGlmICghbV9uYW1lcy5zaXplKCkpIHsKKyAgICAgICAgaWYg
KHByb3h5SXNFbmFibGVkSW5TeXN0ZW1QcmVmZXJlbmNlcygpKQorICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIGlmIChhdG9taWNJbmNyZW1lbnQoJm1fcmVxdWVzdHNJbkZsaWdodCkgPD0g
bmFtZXNUb1Jlc29sdmVJbW1lZGlhdGVseSkgewogICAgICAgICAgICAgcmVzb2x2ZShuYW1lKTsK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNSw2ICsxNTQsMTEgQEAgdm9pZCBETlNSZXNvbHZl
UXVldWU6OmRlY3JlbWVudFJlcXVlc3RDbwogCiB2b2lkIEROU1Jlc29sdmVRdWV1ZTo6ZmlyZWQo
KQogeworICAgIGlmIChwcm94eUlzRW5hYmxlZEluU3lzdGVtUHJlZmVyZW5jZXMoKSkgeworICAg
ICAgICBtX25hbWVzLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpbnQg
cmVxdWVzdHNBbGxvd2VkID0gbWF4U2ltdWx0YW5lb3VzUmVxdWVzdHMgLSBtX3JlcXVlc3RzSW5G
bGlnaHQ7CiAKICAgICBmb3IgKDsgIW1fbmFtZXMuaXNFbXB0eSgpICYmIHJlcXVlc3RzQWxsb3dl
ZCA+IDA7IC0tcmVxdWVzdHNBbGxvd2VkKSB7Cg==
</data>
<flag name="review"
          id="67694"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>