<?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>151783</bug_id>
          
          <creation_ts>2015-12-02 17:34:21 -0800</creation_ts>
          <short_desc>Allow JavaScript to iterate over plugins for local files</short_desc>
          <delta_ts>2015-12-21 12:43:49 -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>Layout and Rendering</component>
          <version>WebKit 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>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1145788</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-12-02 17:34:21 -0800</bug_when>
    <thetext>In Bug 149014 we hid all plugins (except Flash, Java, and QuickTime) so that sites could not inspect the user configuration looking for fingerprinting entropy.

However, there are some cases where we would like to allow this information to be accessed by JavaScript, such as in Safari&apos;s &quot;Help | Installed Plug-ins&quot; page.

Therefore, allow documents loaded from the local file system to iterate over all plugins via JavaScript.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145790</commentid>
    <comment_count>1</comment_count>
      <attachid>266489</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-12-02 17:39:24 -0800</bug_when>
    <thetext>Created attachment 266489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145791</commentid>
    <comment_count>2</comment_count>
      <attachid>266489</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-12-02 17:40:30 -0800</bug_when>
    <thetext>Comment on attachment 266489
Patch

Wouldn&apos;t it be safer to have Safari call some SPI on a WKWebView that allows it to enumerate all plug-ins?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145792</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-12-02 17:40:53 -0800</bug_when>
    <thetext>&lt;rdar://problem/23692113&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145793</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-12-02 17:41:48 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 266489 [details]
&gt; Patch
&gt; 
&gt; Wouldn&apos;t it be safer to have Safari call some SPI on a WKWebView that allows
&gt; it to enumerate all plug-ins?

That was my original proposal, but after discussion with Anders and Alexey it was decided that the &quot;local file&quot; test is sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145807</commentid>
    <comment_count>5</comment_count>
      <attachid>266489</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-12-02 18:35:15 -0800</bug_when>
    <thetext>Comment on attachment 266489
Patch

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

&gt; LayoutTests/http/tests/plugins/plugin-javascript-access.html:16
&gt; +        else

I think there is no need for else here.

&gt; LayoutTests/http/tests/plugins/plugin-javascript-access.html:34
&gt; +            }

I think the style guidelines (for C++ at least) state that there is no need for braces for single line blocks.

&gt; LayoutTests/http/tests/plugins/plugin-javascript-access.html:79
&gt; +    document.writeln(&quot;&lt;p&gt;FAILURE!  (Failed to find netscape test plugin)&lt;\/p&gt;&quot;);

Why do we have two different messages for not finding the netscape test pulgin:
1. (Could not find the netscape test plugin on a non-local file!)
2. (Failed to find netscape test plugin)

Also can&apos;t we move writing the pass/failure messages to checkForTestPlugin()? You may need to pass a parameter like shouldFindTestPlugin and it&apos;s equal to foundTestPlugin, then you write PASS otherwise you write FAILURE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145976</commentid>
    <comment_count>6</comment_count>
      <attachid>266489</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-12-03 11:28:20 -0800</bug_when>
    <thetext>Comment on attachment 266489
Patch

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

&gt;&gt; LayoutTests/http/tests/plugins/plugin-javascript-access.html:16
&gt;&gt; +        else
&gt; 
&gt; I think there is no need for else here.

it&apos;s how the &apos;found&quot; state is reached. However, I restructured things so that we don&apos;t need the &apos;foundTestPlugin&apos; variable or the else.

&gt;&gt; LayoutTests/http/tests/plugins/plugin-javascript-access.html:34
&gt;&gt; +            }
&gt; 
&gt; I think the style guidelines (for C++ at least) state that there is no need for braces for single line blocks.

Sure. I&apos;ll change that.

&gt;&gt; LayoutTests/http/tests/plugins/plugin-javascript-access.html:79
&gt;&gt; +    document.writeln(&quot;&lt;p&gt;FAILURE!  (Failed to find netscape test plugin)&lt;\/p&gt;&quot;);
&gt; 
&gt; Why do we have two different messages for not finding the netscape test pulgin:
&gt; 1. (Could not find the netscape test plugin on a non-local file!)
&gt; 2. (Failed to find netscape test plugin)
&gt; 
&gt; Also can&apos;t we move writing the pass/failure messages to checkForTestPlugin()? You may need to pass a parameter like shouldFindTestPlugin and it&apos;s equal to foundTestPlugin, then you write PASS otherwise you write FAILURE.

I revised the messages so they have the same phrasing, but left the two cases. However, I don&apos;t really want the function to be responsible for the pass/fail state (or the message), since in the first part of the test finding the plugin has a different meaning than after we turn on the debugging feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146003</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-12-03 12:06:30 -0800</bug_when>
    <thetext>Committed r193363: &lt;http://trac.webkit.org/changeset/193363&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146905</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-12-07 10:51:02 -0800</bug_when>
    <thetext>I’d really prefer that this security check be done with SecurityOrigin function rather than a direct call to isLocalFile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150791</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-12-21 12:43:49 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I’d really prefer that this security check be done with SecurityOrigin
&gt; function rather than a direct call to isLocalFile.

Please see Bug 152489, where I make that correction.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266489</attachid>
            <date>2015-12-02 17:39:24 -0800</date>
            <delta_ts>2015-12-03 11:15:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151783-20151202173900.patch</filename>
            <type>text/plain</type>
            <size>9250</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE1LTEyLTAyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IEphdmFTY3JpcHQg
dG8gaXRlcmF0ZSBvdmVyIHBsdWdpbnMgZm9yIGxvY2FsIGZpbGVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE3ODMKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzIzNjkyMTEzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nl
c3MuaHRtbAorICAgICAgICAgICAgICBwbHVnaW5zL3BsdWdpbi1qYXZhc2NyaXB0LWFjY2Vzcy5o
dG1sCisKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6
c2hvd0FsbFBsdWdpbnMpOiBUcnVlIGlmIHdlIHNldCB0aGUgZGVidWdnaW5nIGZsYWcgdG8gc2hv
dworICAgICAgICBhbGwgcGx1Z2lucywgb3IgaWYgdGhlIGRvY3VtZW50J3Mgb3JpZ2luIGlzIGZy
b20gYSBsb2NhbCBmaWxlLgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorCiAyMDE1LTEyLTAyICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXN5
bmNocm9ub3VzbHkgY2FsbCBvbmVycm9yIHdoZW4gYSBjb250ZW50IGJsb2NrZXIgYmxvY2tzIGFz
Y3JpcHQgZWxlbWVudCdzIGxvYWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMTky
OTY5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAi
Q29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VQcm92aWRlci5oIgor
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3Iu
aCIKQEAgLTUxOSw2ICs1MjAsMTEgQEAgUGx1Z2luRGF0YSYgUGFnZTo6cGx1Z2luRGF0YSgpIGNv
bnN0CiAgICAgcmV0dXJuICptX3BsdWdpbkRhdGE7CiB9CiAKK2Jvb2wgUGFnZTo6c2hvd0FsbFBs
dWdpbnMoKSBjb25zdAoreworICAgIHJldHVybiBtX3Nob3dBbGxQbHVnaW5zIHx8IG1haW5GcmFt
ZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnVybCgpLmlzTG9jYWxGaWxlKCk7Cit9CisK
IGlubGluZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIFBhZ2U6OnRha2VBbnlNZWRpYUNhblN0YXJ0
TGlzdGVuZXIoKQogewogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaAkocmV2aXNpb24gMTkyOTY5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZv
aWQgc2V0U2hvd0FsbFBsdWdpbnMoYm9vbCBzaG93QWxsKSB7IG1fc2hvd0FsbFBsdWdpbnMgPSBz
aG93QWxsOyB9Ci0gICAgYm9vbCBzaG93QWxsUGx1Z2lucygpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
d0FsbFBsdWdpbnM7IH0KKyAgICBib29sIHNob3dBbGxQbHVnaW5zKCkgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbml0R3JvdXAoKTsKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE5Mjk2OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIxIEBACisyMDE1LTEyLTAyICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUu
Y29tPgorCisgICAgICAgIEFsbG93IEphdmFTY3JpcHQgdG8gaXRlcmF0ZSBvdmVyIHBsdWdpbnMg
Zm9yIGxvY2FsIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTE3ODMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIzNjkyMTEzPgorCisgICAg
ICAgIE1vZGlmeSB0aGUgZXhpc3RpbmcgJ2xvY2FsIGZpbGUnIHBsdWdpbiB0ZXN0cyBzbyB0aGF0
IHRoZXkgZG9uJ3QgdHVybiBvbiB0aGUgZGVidWdnaW5nCisgICAgICAgIGZsYWcgdG8gYWxsb3cg
aXRlcmF0aW5nIG92ZXIgYWxsIHBsdWdpbnMuIFRoZW4gY3JlYXRlIGEgbmV3IEhUVFAgdGVzdCAo
YmFzZWQgb24gdGhlCisgICAgICAgIGV4aXN0aW5nIHBsdWdpbi1qYXZhc2NyaXB0LWFjY2VzcyB0
ZXN0KSB0byBtYWtlIHN1cmUgdGhhdCBwbHVnaW4gaXRlcmF0aW9uIGlzIGJsb2NrZWQKKyAgICAg
ICAgZm9yIG5vbi1sb2NhbC1maWxlIGFjY2Vzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNj
cmlwdC1hY2Nlc3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Bs
dWdpbnMvcGx1Z2luLWphdmFzY3JpcHQtYWNjZXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBs
dWdpbnMvcGx1Z2luLWphdmFzY3JpcHQtYWNjZXNzLmh0bWw6IFJlbW92ZSB1bm5lZWRlZCAnaW50
ZXJuYWxzLnNldFNob3dBbGxQbHVnaW5zJyBjYWxsLgorICAgICAgICAqIHBsdWdpbnMvc2NyaXB0
LXRlc3RzL25hdmlnYXRvci1taW1lVHlwZXMtbGVuZ3RoLmpzOiBEaXR0by4KKwogMjAxNS0xMi0w
MiAgWW9hdiBXZWlzcyAgPHlvYXZAeW9hdi53cz4KIAogICAgICAgICBGaXggcHJlbG9hZGVyIGlz
c3VlIHdpdGggc3JjZG9jIGRvY3VtZW50cy4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
cGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nl
c3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9w
bHVnaW5zL3BsdWdpbi1qYXZhc2NyaXB0LWFjY2Vzcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorVGVzdCAxOiBBIG5vbi1sb2NhbCBmaWxlIHNob3VsZCBub3Qg
YmUgYWJsZSB0byBpdGVyYXRlIG92ZXIgdGhlIHBsdWdpbnMuCisKK1BBU1MhIChDb3VsZCBub3Qg
ZmluZCB0aGUgbmV0c2NhcGUgdGVzdCBwbHVnaW4gb24gYSBub24tbG9jYWwgZmlsZSEpCisKK1Rl
c3QgMjogQ29uZmlybSB0aGUgcGx1Z2luIGlzIHByZXNlbnQuCisKK05hbWU6IFdlYktpdCBUZXN0
IFBsdWdJbgorCitEZXNjcmlwdGlvbjogU2ltcGxlIE5ldHNjYXBlIHBsdWctaW4gdGhhdCBoYW5k
bGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0CisKK0ZpbGVuYW1lOiBUZXN0TmV0c2NhcGVQbHVn
SW4ucGx1Z2luCisKK01pbWUgVHlwZXM6CisKK1R5cGU6IGFwcGxpY2F0aW9uL3gtd2Via2l0LXRl
c3QtbmV0c2NhcGUKKworRGVzY3JpcHRpb246IHRlc3QgbmV0c2NhcGUgY29udGVudAorCitTdWZm
aXhlczogdGVzdG5ldHNjYXBlCisKKworUGx1Z2luLml0ZW0oKSB3b3Jrcy4KKworUGx1Z2luLm5h
bWVkSXRlbSgpIHdvcmtzLgorCitUeXBlOiBpbWFnZS9wbmcKKworRGVzY3JpcHRpb246IFBORyBp
bWFnZQorCitTdWZmaXhlczogcG5nCisKKworUGx1Z2luLml0ZW0oKSB3b3Jrcy4KKworUGx1Z2lu
Lm5hbWVkSXRlbSgpIHdvcmtzLgorCitQbHVnaW5BcnJheS5pdGVtKCkgd29ya3MuCisKK1BsdWdp
bkFycmF5Lm5hbWVkSXRlbSgpIHdvcmtzLgorCitQQVNTISAoRm91bmQgdGhlIG5ldHNjYXBlIHRl
c3QgcGx1Z2luIG9uIGEgbm9uLWxvY2FsIGZpbGUhKQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9wbHVnaW5zL3BsdWdpbi1qYXZhc2NyaXB0LWFjY2Vzcy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVnaW4tamF2YXNjcmlwdC1hY2Nlc3Mu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9wbHVn
aW4tamF2YXNjcmlwdC1hY2Nlc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBA
Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29u
dGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKyAgICA8dGl0bGU+SW5zdGFsbGVkIFBs
dWctaW5zPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlv
bi94LWphdmFzY3JpcHQiPgorZnVuY3Rpb24gY2hlY2tGb3JUZXN0UGx1Z2luKCkgeworICAgIHZh
ciBmb3VuZFRlc3RQbHVnaW4gPSBmYWxzZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hdmln
YXRvci5wbHVnaW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBwbHVnaW4gPSBuYXZpZ2F0
b3IucGx1Z2luc1tpXTsKKworICAgICAgICAvLyBXZSBjYW4gb25seSBndWFyYW50ZWUgdGhhdCB0
aGUgVGVzdCBQbHVnSW4gaXMgaW5zdGFsbGVkLgorICAgICAgICBpZiAocGx1Z2luLm5hbWUgIT0g
IldlYktpdCBUZXN0IFBsdWdJbiIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZm91bmRUZXN0UGx1Z2luID0gdHJ1ZTsKKworICAgICAgICBkb2N1bWVu
dC53cml0ZWxuKCI8cD5OYW1lOiAiICsgcGx1Z2luLm5hbWUgKyAiPFwvcD4iKTsKKyAgICAgICAg
ZG9jdW1lbnQud3JpdGVsbigiPHA+RGVzY3JpcHRpb246ICIgKyBwbHVnaW4uZGVzY3JpcHRpb24g
KyAiPFwvcD4iKTsKKyAgICAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+RmlsZW5hbWU6ICIgKyBw
bHVnaW4uZmlsZW5hbWUgKyAiPFwvcD4iKTsKKworICAgICAgICBkb2N1bWVudC53cml0ZWxuKCI8
cD5NaW1lIFR5cGVzOjxcL3A+Iik7CisgICAgICAgIGZvciAodmFyIG1pID0gMDsgbWkgIT0gcGx1
Z2luLmxlbmd0aDsgKyttaSkgeworICAgICAgICAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+VHlw
ZTogIiArIHBsdWdpblttaV0udHlwZSArICI8XC9wPiIpOworICAgICAgICAgICAgZG9jdW1lbnQu
d3JpdGVsbigiPHA+RGVzY3JpcHRpb246ICIgKyBwbHVnaW5bbWldLmRlc2NyaXB0aW9uICsgIjxc
L3A+Iik7CisgICAgICAgICAgICBkb2N1bWVudC53cml0ZWxuKCI8cD5TdWZmaXhlczogIiArIHBs
dWdpblttaV0uc3VmZml4ZXMgKyAiPFwvcD4iKTsKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRl
bG4oIjxicj4iKTsKKworICAgICAgICAgICAgaWYgKHBsdWdpbi5pdGVtKG1pKS50eXBlID09IHBs
dWdpblttaV0udHlwZSkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPlBs
dWdpbi5pdGVtKCkgd29ya3MuPFwvcD4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+RkFJTC4gUGx1Z2luLml0ZW0oKSBkb2VzIG5v
dCB3b3JrLjxcL3A+Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbHVnaW4u
bmFtZWRJdGVtKHBsdWdpblttaV0udHlwZSkudHlwZSA9PSBwbHVnaW5bbWldLnR5cGUpIHsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudC53cml0ZWxuKCI8cD5QbHVnaW4ubmFtZWRJdGVtKCkgd29y
a3MuPFwvcD4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQud3JpdGVsbigiPHA+RkFJTC4gUGx1Z2luLm5hbWVkSXRlbSgpIGRvZXMgbm90IHdvcmsuPFwv
cD4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChuYXZpZ2F0b3Iu
cGx1Z2lucy5pdGVtKGkpLm5hbWUgPT0gcGx1Z2luLm5hbWUpIHsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LndyaXRlbG4oIjxwPlBsdWdpbkFycmF5Lml0ZW0oKSB3b3Jrcy48XC9wPiIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+RkFJTC4gUGx1Z2lu
QXJyYXkuaXRlbSgpIGRvZXMgbm90IHdvcmsuPFwvcD4iKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChuYXZpZ2F0b3IucGx1Z2lucy5uYW1lZEl0ZW0ocGx1Z2luLm5hbWUpLm5hbWUgPT0gcGx1
Z2luLm5hbWUpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPlBsdWdpbkFycmF5
Lm5hbWVkSXRlbSgpIHdvcmtzLjxcL3A+Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBkb2N1bWVudC53cml0ZWxuKCI8cD5GQUlMLiBQbHVnaW5BcnJheS5uYW1lZEl0ZW0oKSBkb2Vz
IG5vdCB3b3JrLjxcL3A+Iik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZm91bmRU
ZXN0UGx1Z2luOworfQorICAgCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCkKKworbmF2aWdhdG9yLnBsdWdpbnMucmVmcmVzaChmYWxzZSk7IC8vIFN1
cHBvc2VkbHkgaGVscHMgaWYgbmV3IHBsdWctaW5zIHdlcmUgYWRkZWQuCisKKy8vIEEgbm9uLWxv
Y2FsIGZpbGUgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgaW5zdGFs
bGVkIHBsdWdpbnMuCitkb2N1bWVudC53cml0ZWxuKCI8cD5UZXN0IDE6IEEgbm9uLWxvY2FsIGZp
bGUgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGl0ZXJhdGUgb3ZlciB0aGUgcGx1Z2lucy48XC9wPiIp
OworaWYgKGNoZWNrRm9yVGVzdFBsdWdpbigpKQorICAgIGRvY3VtZW50LndyaXRlbG4oIjxwPkZB
SUxVUkUhICAoRm91bmQgdGhlIG5ldHNjYXBlIHRlc3QgcGx1Z2luIG9uIGEgbm9uLWxvY2FsIGZp
bGUhKTxcL3A+Iik7CitlbHNlCisgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+UEFTUyEgIChDb3Vs
ZCBub3QgZmluZCB0aGUgbmV0c2NhcGUgdGVzdCBwbHVnaW4gb24gYSBub24tbG9jYWwgZmlsZSEp
PFwvcD4iKTsKKworLy8gQWN0aXZhdGUgb3VyIGRlYnVnZ2luZyBjb2RlIHRvIHNob3cgYWxsIHBs
dWdpbnMgdG8gY29uZmlybSB3ZSBkbyBoYXZlIHRoZSB0ZXN0IHBsdWdpbi4KK2RvY3VtZW50Lndy
aXRlbG4oIjxwPlRlc3QgMjogQ29uZmlybSB0aGUgcGx1Z2luIGlzIHByZXNlbnQuPFwvcD4iKTsK
K2lmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgIGludGVybmFscy5zZXRTaG93QWxsUGx1Z2lucyh0
cnVlKTsKKworaWYgKGNoZWNrRm9yVGVzdFBsdWdpbigpKQorICAgIGRvY3VtZW50LndyaXRlbG4o
IjxwPlBBU1MhICAoRm91bmQgdGhlIG5ldHNjYXBlIHRlc3QgcGx1Z2luIG9uIGEgbm9uLWxvY2Fs
IGZpbGUhKTxcL3A+Iik7CitlbHNlCisgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+RkFJTFVSRSEg
IChGYWlsZWQgdG8gZmluZCBuZXRzY2FwZSB0ZXN0IHBsdWdpbik8XC9wPiIpOworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbHVnaW5zL3BsdWdpbi1qYXZh
c2NyaXB0LWFjY2Vzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsdWdpbnMvcGx1
Z2luLWphdmFzY3JpcHQtYWNjZXNzLmh0bWwJKHJldmlzaW9uIDE5Mjk2OSkKKysrIExheW91dFRl
c3RzL3BsdWdpbnMvcGx1Z2luLWphdmFzY3JpcHQtYWNjZXNzLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTgsOSArOCw2IEBACiBpZiAod2luZG93LnRlc3RSdW5uZXIpCiAgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCkKIAotaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0gICAgaW50ZXJuYWxzLnNldFNo
b3dBbGxQbHVnaW5zKHRydWUpOwotCiBuYXZpZ2F0b3IucGx1Z2lucy5yZWZyZXNoKGZhbHNlKTsg
Ly8gU3VwcG9zZWRseSBoZWxwcyBpZiBuZXcgcGx1Zy1pbnMgd2VyZSBhZGRlZC4KIAogdmFyIGZv
dW5kVGVzdFBsdWdpbiA9IGZhbHNlOwpJbmRleDogTGF5b3V0VGVzdHMvcGx1Z2lucy9zY3JpcHQt
dGVzdHMvbmF2aWdhdG9yLW1pbWVUeXBlcy1sZW5ndGguanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGx1Z2lucy9zY3JpcHQtdGVzdHMvbmF2aWdhdG9yLW1pbWVUeXBlcy1sZW5ndGguanMJ
KHJldmlzaW9uIDE5Mjk2OSkKKysrIExheW91dFRlc3RzL3BsdWdpbnMvc2NyaXB0LXRlc3RzL25h
dmlnYXRvci1taW1lVHlwZXMtbGVuZ3RoLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yLDkgKzIsNiBA
QCBkZXNjcmlwdGlvbigKICJUZXN0IGZvciBidWcgMTAwMzg6IFJFR1JFU1NJT046IExlbmd0aCBv
ZiBuYXZpZ2F0b3IubWltZVR5cGVzIGNvbGxlY3Rpb24gcmV0dXJucyBudW1iZXIgb2YgaW5zdGFs
bGVkIHBsdWdpbnMsIG5vdCBudW1iZXIgb2YgcmVnaXN0ZXJlZCBtaW1lIHR5cGVzLiIKICk7CiAK
LWlmICh3aW5kb3cuaW50ZXJuYWxzKQotICAgIGludGVybmFscy5zZXRTaG93QWxsUGx1Z2lucyh0
cnVlKTsKLQogdmFyIG51bWJlck9mTWltZVR5cGVzID0gMDsKIGZvciAodmFyIGkgPSAwOyBpIDwg
bmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHsKICAgICB2YXIgcGx1Z2luID0gbmF2aWdh
dG9yLnBsdWdpbnNbaV07Cg==
</data>
<flag name="review"
          id="291501"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>