<?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>86191</bug_id>
          
          <creation_ts>2012-05-11 02:25:18 -0700</creation_ts>
          <short_desc>Mac DRT should be able to load external URLs for replay performance tests</short_desc>
          <delta_ts>2012-05-23 13:20:49 -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>Tools / Tests</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>
          
          <blocked>84008</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>621420</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-11 02:25:18 -0700</bug_when>
    <thetext>For https://bugs.webkit.org/show_bug.cgi?id=84008, we want to be able to load URLs like http://www.google.com/ on DRT, and transparently forwarded to localhost by proxy setting.

So we need to let DRT load external resources when the main frame&apos;s URL itself is hosted on non-localhost http or https.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621680</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-11 08:59:32 -0700</bug_when>
    <thetext>Please don&apos;t just drop the block unconditionally, it&apos;s these for a reason (it used to be not uncommon that tests with remote links were checked in).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621715</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-11 09:44:39 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Please don&apos;t just drop the block unconditionally, it&apos;s these for a reason (it used to be not uncommon that tests with remote links were checked in).

My plan is to check the URL of the main resource, and allow external resource loading only if that&apos;s also an external URL. e.g. DumpRenderTree http://www.google.com/ can load external resources whereas DumpRenderTree test.html or DumpRenderTree http://localhost:8000/ can&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621841</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-11 11:44:59 -0700</bug_when>
    <thetext>It may still be common. :)  We used to have flaky tests which would flake based on your network connectivity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621980</commentid>
    <comment_count>4</comment_count>
      <attachid>141497</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-11 14:29:25 -0700</bug_when>
    <thetext>Created attachment 141497
Adds the feature</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622399</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-12 11:35:22 -0700</bug_when>
    <thetext>e.g. I&apos;ve also converted Parser/tiny-HTML.html and obtain the following results. 
It indicates that runs/s version no only several times faster to run, but it also produces more statistically sound result. Observe that the standard deviation between mean of runs is smaller than the standard deviation of individual runs for run/s, but it&apos;s bigger for ms.

RESULT Parser: tiny-innerHTML= 5.13164237919 runs/s
median= 5.14138817481 runs/s, stdev= 0.0394345880796 runs/s, min= 5.03778337531 runs/s, max= 5.19480519481 runs/s

RESULT Parser: tiny-innerHTML= 5.1284352539 runs/s
median= 5.13478818999 runs/s, stdev= 0.0342742796963 runs/s, min= 5.05689001264 runs/s, max= 5.17464424321 runs/s

RESULT Parser: tiny-innerHTML= 5.1199600961 runs/s
median= 5.12163892446 runs/s, stdev= 0.0314570907516 runs/s, min= 5.03778337531 runs/s, max= 5.16795865633 runs/s

RESULT Parser: tiny-innerHTML= 5.11276918215 runs/s
median= 5.12163892446 runs/s, stdev= 0.029477288025 runs/s, min= 5.05050505051 runs/s, max= 5.15463917526 runs/s

RESULT Parser: tiny-innerHTML= 5.12375369947 runs/s
median= 5.12163892446 runs/s, stdev= 0.0351098248412 runs/s, min= 5.05689001264 runs/s, max= 5.18806744488 runs/s

stat([5.13164237919, 5.1284352539, 5.1199600961, 5.11276918215, 5.12375369947])
{&apos;min&apos;: 5.113, &apos;max&apos;: 5.132, &apos;median&apos;: 5.120, &apos;stdev&apos;: 0.014772, &apos;avg&apos;: 5.1233, &apos;unit&apos;: &apos;ms&apos;}


RESULT Parser: tiny-innerHTML= 1940.45 ms
median= 1942.0 ms, stdev= 8.56431550096 ms, min= 1922.0 ms, max= 1955.0 ms

RESULT Parser: tiny-innerHTML= 1946.1 ms
median= 1943.0 ms, stdev= 11.5147731198 ms, min= 1929.0 ms, max= 1977.0 ms

RESULT Parser: tiny-innerHTML= 1955.6 ms
median= 1953.5 ms, stdev= 9.60937042683 ms, min= 1940.0 ms, max= 1975.0 ms

RESULT Parser: tiny-innerHTML= 1945.2 ms
median= 1945.0 ms, stdev= 9.61041102139 ms, min= 1928.0 ms, max= 1970.0 ms

RESULT Parser: tiny-innerHTML= 1948.5 ms
median= 1948.0 ms, stdev= 8.86284378741 ms, min= 1936.0 ms, max= 1976.0 ms

stat([1940.45, 1946.1, 1955.6, 1945.2, 1948.5])
{&apos;min&apos;: 1940.45, &apos;max&apos;: 1955.60, &apos;median&apos;: 1955.60, &apos;stdev&apos;: 11.091, &apos;avg&apos;: 1947.17, &apos;unit&apos;: &apos;ms&apos;}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622400</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-12 11:40:05 -0700</bug_when>
    <thetext>Ugh... stat function used in the previous post had a slight bug. They should have been:

stat([5.13164237919, 5.1284352539, 5.1199600961, 5.11276918215, 5.12375369947])
{&apos;min&apos;: 5.11277, &apos;max&apos;: 5.13164, &apos;median&apos;: 5.12375, &apos;stdev&apos;: 0.0147724, &apos;avg&apos;: 5.12331, &apos;unit&apos;: &apos;ms&apos;}

stat([1940.45, 1946.1, 1955.6, 1945.2, 1948.5])
{&apos;min&apos;: 1940.45, &apos;max&apos;: 1955.60, &apos;median&apos;: 1946.10, &apos;stdev&apos;: 11.09, &apos;avg&apos;: 1947.17, &apos;unit&apos;: &apos;ms&apos;}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629216</commentid>
    <comment_count>7</comment_count>
      <attachid>141497</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-21 10:03:17 -0700</bug_when>
    <thetext>Comment on attachment 141497
Adds the feature

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

The idea is perfectly good. I think that the patch would benefit from another iteration.

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:132
&gt; +    return NSOrderedSame == [host compare:@&quot;127.0.0.1&quot;] || NSOrderedSame == [host caseInsensitiveCompare:@&quot;localhost&quot;];

We block IPv6 today, but it seems somewhat undesirable to rely on that here.

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:135
&gt; +BOOL hostIsUsedBySomeTestToGetError(const NSString* host)

I&apos;d say &quot;tests&quot;, not &quot;test&quot;, and also probably &quot;simulate failure&quot; or &quot;generate error&quot;.

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:164
&gt; +        NSURL *testUrl = done ? 0 : [[NSURL alloc] initWithString: [NSString stringWithUTF8String: gLayoutTestController-&gt;testPathOrURL().c_str()]];
&gt; +        NSString *testUrlHost = testUrl ? [testUrl host] : 0;

s/Url/URL/

The function you use is named &quot;testPathOrURL&quot;. Why is it OK to just create a URL from its result? This looks suspicious.

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:166
&gt; +        if (!testUrlHost || (isLocalhost(testUrlHost) &amp;&amp; !isLocalhost(host)) || hostIsUsedBySomeTestToGetError(host)) {
&gt; +            printf(&quot;Blocked access to external URL %s\n&quot;, [[url absoluteString] cStringUsingEncoding:NSUTF8StringEncoding]);

This message is untrue when testUrlHost is nil.

Also, it looks like the message will be printed if hostIsUsedBySomeTestToGetError returns true, which is a change from original behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629241</commentid>
    <comment_count>8</comment_count>
      <attachid>141497</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-21 10:28:53 -0700</bug_when>
    <thetext>Comment on attachment 141497
Adds the feature

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

&gt;&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:132
&gt;&gt; +    return NSOrderedSame == [host compare:@&quot;127.0.0.1&quot;] || NSOrderedSame == [host caseInsensitiveCompare:@&quot;localhost&quot;];
&gt; 
&gt; We block IPv6 today, but it seems somewhat undesirable to rely on that here.

Will add a FIXME.

&gt;&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:135
&gt;&gt; +BOOL hostIsUsedBySomeTestToGetError(const NSString* host)
&gt; 
&gt; I&apos;d say &quot;tests&quot;, not &quot;test&quot;, and also probably &quot;simulate failure&quot; or &quot;generate error&quot;.

Will fix.

&gt;&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:164
&gt;&gt; +        NSString *testUrlHost = testUrl ? [testUrl host] : 0;
&gt; 
&gt; s/Url/URL/
&gt; 
&gt; The function you use is named &quot;testPathOrURL&quot;. Why is it OK to just create a URL from its result? This looks suspicious.

Will fix.

&gt;&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:166
&gt;&gt; +            printf(&quot;Blocked access to external URL %s\n&quot;, [[url absoluteString] cStringUsingEncoding:NSUTF8StringEncoding]);
&gt; 
&gt; This message is untrue when testUrlHost is nil.
&gt; 
&gt; Also, it looks like the message will be printed if hostIsUsedBySomeTestToGetError returns true, which is a change from original behavior.

Nice catch! Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629439</commentid>
    <comment_count>9</comment_count>
      <attachid>141497</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-21 13:34:23 -0700</bug_when>
    <thetext>Comment on attachment 141497
Adds the feature

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

&gt;&gt;&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:164
&gt;&gt;&gt; +        NSString *testUrlHost = testUrl ? [testUrl host] : 0;
&gt;&gt; 
&gt;&gt; s/Url/URL/
&gt;&gt; 
&gt;&gt; The function you use is named &quot;testPathOrURL&quot;. Why is it OK to just create a URL from its result? This looks suspicious.
&gt; 
&gt; Will fix.

Actually the current code is correct because NSURL initWithString returns nil if the URL was malformed (e.g. it was a file path).
Detecting whether it was a URL or not would require case-insensitive prefix comparison of strings, which neither WTFString nor NSString seems to support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629463</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-21 13:51:27 -0700</bug_when>
    <thetext>&gt; Actually the current code is correct because NSURL initWithString returns nil if the URL was malformed (e.g. it was a file path).

Hmm. I&apos;m not sure if this is correct (despite documentation). See e.g. bug 86265, where we&apos;ve been getting an invalid URL, and I suspect that it was actually created with -initWithString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629833</commentid>
    <comment_count>11</comment_count>
      <attachid>143164</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-21 18:39:04 -0700</bug_when>
    <thetext>Created attachment 143164
Fixed per Alexey&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630483</commentid>
    <comment_count>12</comment_count>
      <attachid>143164</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-22 10:06:41 -0700</bug_when>
    <thetext>Comment on attachment 143164
Fixed per Alexey&apos;s comment

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

Looks better. I think that I should look at the final variant once more, so r-.

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:130
&gt; +BOOL isLocalhost(const NSString *host)

There should be no &quot;const&quot; on NSString - this class is immutable.

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:136
&gt; +BOOL hostIsUsedBySomeTestsToToGenerateError(const NSString *host)

Ditto.

ToTo?

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:164
&gt; +        NSString *testURLString = [NSString stringWithUTF8String: gLayoutTestController-&gt;testPathOrURL().c_str()];

In WebKit code, there is usually no space after colon.

Maybe the variable should be called &quot;testPathOrURLString&quot; to match function name?

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:165
&gt; +        NSString *lowercaseTestURL = [testURLString lowercaseString];

I would just combine these into a chain call: 

NSString *lowercaseTestPathOrURL = [[NSString stringWithUTF8String: gLayoutTestController-&gt;testPathOrURL().c_str()] lowercaseString];

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:167
&gt; +        if ([lowercaseTestURL hasPrefix: [NSString stringWithCString: &quot;http:&quot;]] || [lowercaseTestURL hasPrefix: [NSString stringWithCString: &quot;https:&quot;]]) {

Instead of stringWithCString, please use literals: @&quot;http:&quot;.

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:169
&gt; +            NSURL *testURL = [[NSURL alloc] initWithString: testURLString];
&gt; +            testHost = testURL ? [testURL host] : 0;

Alloc/init create an object that needs to be released. Also, it&apos;s usually fine to call methods on nil objects (with rare exceptions that depend on return type). A better way to write this is:

testHost = [[NSURL URLWithString:testURLString] host];</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631833</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-23 11:18:19 -0700</bug_when>
    <thetext>Thanks for the review again. Will fix all of them except:

(In reply to comment #12)
&gt; &gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:165
&gt; &gt; +        NSString *lowercaseTestURL = [testURLString lowercaseString];
&gt; 
&gt; I would just combine these into a chain call: 
&gt; 
&gt; NSString *lowercaseTestPathOrURL = [[NSString stringWithUTF8String: gLayoutTestController-&gt;testPathOrURL().c_str()] lowercaseString];

We would need non-lowercased version for instantiating URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631857</commentid>
    <comment_count>14</comment_count>
      <attachid>143603</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-23 11:42:44 -0700</bug_when>
    <thetext>Created attachment 143603
More fixes per Alexey&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631897</commentid>
    <comment_count>15</comment_count>
      <attachid>143603</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-23 12:22:24 -0700</bug_when>
    <thetext>Comment on attachment 143603
More fixes per Alexey&apos;s comment

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

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:132
&gt; +    // FIXME: Support IPv6 loopbacks

Nit: period at the end of  sentence.

&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:165
&gt; +        NSString *lowercaseTestURL = [testPathOrURL lowercaseString];

Should this be lowercaseTestPathOrURL, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631947</commentid>
    <comment_count>16</comment_count>
      <attachid>143603</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-23 13:08:18 -0700</bug_when>
    <thetext>Comment on attachment 143603
More fixes per Alexey&apos;s comment

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

&gt;&gt; Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm:165
&gt;&gt; +        NSString *lowercaseTestURL = [testPathOrURL lowercaseString];
&gt; 
&gt; Should this be lowercaseTestPathOrURL, too?

Yes! Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631967</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-23 13:20:49 -0700</bug_when>
    <thetext>Committed r118231: &lt;http://trac.webkit.org/changeset/118231&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141497</attachid>
            <date>2012-05-11 14:29:25 -0700</date>
            <delta_ts>2012-05-21 18:39:00 -0700</delta_ts>
            <desc>Adds the feature</desc>
            <filename>bug-86191-20120511143037.patch</filename>
            <type>text/plain</type>
            <size>3368</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExNjgwMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDEyLTA1LTExICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIE1hYyBEUlQgc2hvdWxkIGJlIGFibGUgdG8gbG9hZCBleHRlcm5hbCBVUkxzIGZv
ciByZXBsYXkgcGVyZm9ybWFuY2UgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg2MTkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTGV0IGV4dGVybmFsIFVSTCByZXF1ZXN0cyBnbyB0aHJvdWdoIGlm
IHRoZSB0ZXN0IGZpbGUgaXMgbm90IGEgbG9jYWwgZmlsZSBvciBob3N0ZWQgYXQgbG9jYWxob3N0
LgorICAgICAgICBlLmcuICJEdW1wUmVuZGVyVHJlZSBodHRwOi8vd2Via2l0Lm9yZy8iIGFzIHN1
cHBvc2VkIHRvICJEdW1wUmVuZGVyVHJlZSB0ZXN0Lmh0bWwiIG9yCisgICAgICAgICJEdW1wUmVu
ZGVyVHJlZSBodHRwOi8vbG9jYWxob3N0OjgwMDAvIi4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbToKKyAgICAgICAgKGlzTG9jYWxob3N0KToK
KyAgICAgICAgKGhvc3RJc1VzZWRCeVNvbWVUZXN0VG9HZXRFcnJvcik6CisgICAgICAgICgtW1Jl
c291cmNlTG9hZERlbGVnYXRlIHdlYlZpZXc6cmVzb3VyY2U6d2lsbFNlbmRSZXF1ZXN0OnJlZGly
ZWN0UmVzcG9uc2U6ZnJvbURhdGFTb3VyY2U6XSk6CisKIDIwMTItMDUtMTEgIEtldmluIE9sbGl2
aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBVbnJldmlld2Vk
IGJ1aWxkIGZpeC4gRml4IG1lbW9yeSBleGhhdXN0ZWQgZXJyb3JzIGZyb20gMzItYml0IGxkIG9u
ICpuaXguCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2FkRGVsZWdh
dGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Jlc291cmNlTG9h
ZERlbGVnYXRlLm1tCShyZXZpc2lvbiAxMTY3MjIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcs
MTYgQEAgLSAoaWQpd2ViVmlldzogKFdlYlZpZXcgKil3diBpZGVudGlmaWVyRgogICAgIHJldHVy
biBAIjx1bmtub3duPiI7CiB9CiAKK0JPT0wgaXNMb2NhbGhvc3QoY29uc3QgTlNTdHJpbmcqIGhv
c3QpCit7CisgICAgcmV0dXJuIE5TT3JkZXJlZFNhbWUgPT0gW2hvc3QgY29tcGFyZTpAIjEyNy4w
LjAuMSJdIHx8IE5TT3JkZXJlZFNhbWUgPT0gW2hvc3QgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpA
ImxvY2FsaG9zdCJdOworfQorCitCT09MIGhvc3RJc1VzZWRCeVNvbWVUZXN0VG9HZXRFcnJvcihj
b25zdCBOU1N0cmluZyogaG9zdCkKK3sKKyAgICByZXR1cm4gTlNPcmRlcmVkU2FtZSA9PSBbaG9z
dCBjb21wYXJlOkAiMjU1LjI1NS4yNTUuMjU1Il07Cit9CisKIC0oTlNVUkxSZXF1ZXN0ICopd2Vi
VmlldzogKFdlYlZpZXcgKil3diByZXNvdXJjZTppZGVudGlmaWVyIHdpbGxTZW5kUmVxdWVzdDog
KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgcmVkaXJlY3RSZXNwb25zZTooTlNVUkxSZXNwb25zZSAq
KXJlZGlyZWN0UmVzcG9uc2UgZnJvbURhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291
cmNlCiB7CiAgICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpKSB7CkBAIC0xNDksMTMgKzE1OSwxMyBAQCAtKE5TVVJMUmVxdWVz
dCAqKXdlYlZpZXc6IChXZWJWaWV3ICopd3YgCiAKICAgICBOU1VSTCAqdXJsID0gW3JlcXVlc3Qg
VVJMXTsKICAgICBOU1N0cmluZyAqaG9zdCA9IFt1cmwgaG9zdF07Ci0gICAgaWYgKGhvc3QKLSAg
ICAgICAgJiYgKE5TT3JkZXJlZFNhbWUgPT0gW1t1cmwgc2NoZW1lXSBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlOkAiaHR0cCJdIHx8IE5TT3JkZXJlZFNhbWUgPT0gW1t1cmwgc2NoZW1lXSBjYXNlSW5z
ZW5zaXRpdmVDb21wYXJlOkAiaHR0cHMiXSkKLSAgICAgICAgJiYgTlNPcmRlcmVkU2FtZSAhPSBb
aG9zdCBjb21wYXJlOkAiMTI3LjAuMC4xIl0KLSAgICAgICAgJiYgTlNPcmRlcmVkU2FtZSAhPSBb
aG9zdCBjb21wYXJlOkAiMjU1LjI1NS4yNTUuMjU1Il0gLy8gdXNlZCBpbiBzb21lIHRlc3RzIHRo
YXQgZXhwZWN0IHRvIGdldCBiYWNrIGFuIGVycm9yCi0gICAgICAgICYmIE5TT3JkZXJlZFNhbWUg
IT0gW2hvc3QgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImxvY2FsaG9zdCJdKSB7Ci0gICAgICAg
IHByaW50ZigiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICVzXG4iLCBbW3VybCBhYnNv
bHV0ZVN0cmluZ10gY1N0cmluZ1VzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsK
LSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoaG9zdCAmJiAoTlNPcmRlcmVkU2FtZSA9PSBb
W3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRwIl0gfHwgTlNPcmRlcmVk
U2FtZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRwcyJdKSkg
eworICAgICAgICBOU1VSTCAqdGVzdFVybCA9IGRvbmUgPyAwIDogW1tOU1VSTCBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzogZ0xheW91dFRlc3RD
b250cm9sbGVyLT50ZXN0UGF0aE9yVVJMKCkuY19zdHIoKV1dOworICAgICAgICBOU1N0cmluZyAq
dGVzdFVybEhvc3QgPSB0ZXN0VXJsID8gW3Rlc3RVcmwgaG9zdF0gOiAwOworICAgICAgICBpZiAo
IXRlc3RVcmxIb3N0IHx8IChpc0xvY2FsaG9zdCh0ZXN0VXJsSG9zdCkgJiYgIWlzTG9jYWxob3N0
KGhvc3QpKSB8fCBob3N0SXNVc2VkQnlTb21lVGVzdFRvR2V0RXJyb3IoaG9zdCkpIHsKKyAgICAg
ICAgICAgIHByaW50ZigiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICVzXG4iLCBbW3Vy
bCBhYnNvbHV0ZVN0cmluZ10gY1N0cmluZ1VzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAoZGlzYWxsb3dlZFVSTHMgJiYgQ0ZTZXRDb250YWluc1ZhbHVlKGRpc2FsbG93ZWRVUkxzLCB1
cmwpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143164</attachid>
            <date>2012-05-21 18:39:04 -0700</date>
            <delta_ts>2012-05-23 11:42:40 -0700</delta_ts>
            <desc>Fixed per Alexey&apos;s comment</desc>
            <filename>bug-86191-20120521184239.patch</filename>
            <type>text/plain</type>
            <size>3697</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExNzgwNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDEyLTA1LTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIE1hYyBEUlQgc2hvdWxkIGJlIGFibGUgdG8gbG9hZCBleHRlcm5hbCBVUkxzIGZv
ciByZXBsYXkgcGVyZm9ybWFuY2UgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg2MTkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTGV0IGV4dGVybmFsIFVSTCByZXF1ZXN0cyBnbyB0aHJvdWdoIGlm
IHRoZSB0ZXN0IGZpbGUgaXMgbm90IGEgbG9jYWwgZmlsZSBvciBob3N0ZWQgYXQgbG9jYWxob3N0
LgorICAgICAgICBlLmcuICJEdW1wUmVuZGVyVHJlZSBodHRwOi8vd2Via2l0Lm9yZy8iIGFzIHN1
cHBvc2VkIHRvICJEdW1wUmVuZGVyVHJlZSB0ZXN0Lmh0bWwiIG9yCisgICAgICAgICJEdW1wUmVu
ZGVyVHJlZSBodHRwOi8vbG9jYWxob3N0OjgwMDAvIi4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbToKKyAgICAgICAgKGlzTG9jYWxob3N0KToK
KyAgICAgICAgKGhvc3RJc1VzZWRCeVNvbWVUZXN0c1RvVG9HZW5lcmF0ZUVycm9yKToKKyAgICAg
ICAgKC1bUmVzb3VyY2VMb2FkRGVsZWdhdGUgd2ViVmlldzpyZXNvdXJjZTp3aWxsU2VuZFJlcXVl
c3Q6cmVkaXJlY3RSZXNwb25zZTpmcm9tRGF0YVNvdXJjZTpdKToKKwogMjAxMi0wNS0yMSAgRGly
ayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICB3ZWJraXRweTogY2xl
YW4gdXAgdGhlIFRlc3RFeHBlY3RhdGlvbnMgY29uc3RydWN0b3IKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0JKHJldmlzaW9uIDEx
NzgwNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxNyBAQCAtIChpZCl3ZWJWaWV3OiAoV2Vi
VmlldyAqKXd2IGlkZW50aWZpZXJGCiAgICAgcmV0dXJuIEAiPHVua25vd24+IjsKIH0KIAorQk9P
TCBpc0xvY2FsaG9zdChjb25zdCBOU1N0cmluZyAqaG9zdCkKK3sKKyAgICAvLyBGSVhNRTogU3Vw
cG9ydCBJUHY2IGxvb3BiYWNrcworICAgIHJldHVybiBOU09yZGVyZWRTYW1lID09IFtob3N0IGNv
bXBhcmU6QCIxMjcuMC4wLjEiXSB8fCBOU09yZGVyZWRTYW1lID09IFtob3N0IGNhc2VJbnNlbnNp
dGl2ZUNvbXBhcmU6QCJsb2NhbGhvc3QiXTsKK30KKworQk9PTCBob3N0SXNVc2VkQnlTb21lVGVz
dHNUb1RvR2VuZXJhdGVFcnJvcihjb25zdCBOU1N0cmluZyAqaG9zdCkKK3sKKyAgICByZXR1cm4g
TlNPcmRlcmVkU2FtZSA9PSBbaG9zdCBjb21wYXJlOkAiMjU1LjI1NS4yNTUuMjU1Il07Cit9CisK
IC0oTlNVUkxSZXF1ZXN0ICopd2ViVmlldzogKFdlYlZpZXcgKil3diByZXNvdXJjZTppZGVudGlm
aWVyIHdpbGxTZW5kUmVxdWVzdDogKE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgcmVkaXJlY3RSZXNw
b25zZTooTlNVUkxSZXNwb25zZSAqKXJlZGlyZWN0UmVzcG9uc2UgZnJvbURhdGFTb3VyY2U6KFdl
YkRhdGFTb3VyY2UgKilkYXRhU291cmNlCiB7CiAgICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CkBAIC0xNDksMTMgKzE2
MCwxOCBAQCAtKE5TVVJMUmVxdWVzdCAqKXdlYlZpZXc6IChXZWJWaWV3ICopd3YgCiAKICAgICBO
U1VSTCAqdXJsID0gW3JlcXVlc3QgVVJMXTsKICAgICBOU1N0cmluZyAqaG9zdCA9IFt1cmwgaG9z
dF07Ci0gICAgaWYgKGhvc3QKLSAgICAgICAgJiYgKE5TT3JkZXJlZFNhbWUgPT0gW1t1cmwgc2No
ZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiaHR0cCJdIHx8IE5TT3JkZXJlZFNhbWUgPT0g
W1t1cmwgc2NoZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiaHR0cHMiXSkKLSAgICAgICAg
JiYgTlNPcmRlcmVkU2FtZSAhPSBbaG9zdCBjb21wYXJlOkAiMTI3LjAuMC4xIl0KLSAgICAgICAg
JiYgTlNPcmRlcmVkU2FtZSAhPSBbaG9zdCBjb21wYXJlOkAiMjU1LjI1NS4yNTUuMjU1Il0gLy8g
dXNlZCBpbiBzb21lIHRlc3RzIHRoYXQgZXhwZWN0IHRvIGdldCBiYWNrIGFuIGVycm9yCi0gICAg
ICAgICYmIE5TT3JkZXJlZFNhbWUgIT0gW2hvc3QgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImxv
Y2FsaG9zdCJdKSB7Ci0gICAgICAgIHByaW50ZigiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJuYWwg
VVJMICVzXG4iLCBbW3VybCBhYnNvbHV0ZVN0cmluZ10gY1N0cmluZ1VzaW5nRW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoaG9zdCAm
JiAoTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6
QCJodHRwIl0gfHwgTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2
ZUNvbXBhcmU6QCJodHRwcyJdKSkgeworICAgICAgICBOU1N0cmluZyAqdGVzdFVSTFN0cmluZyA9
IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzogZ0xheW91dFRlc3RDb250cm9sbGVyLT50
ZXN0UGF0aE9yVVJMKCkuY19zdHIoKV07CisgICAgICAgIE5TU3RyaW5nICpsb3dlcmNhc2VUZXN0
VVJMID0gW3Rlc3RVUkxTdHJpbmcgbG93ZXJjYXNlU3RyaW5nXTsKKyAgICAgICAgTlNTdHJpbmcg
KnRlc3RIb3N0ID0gMDsKKyAgICAgICAgaWYgKFtsb3dlcmNhc2VUZXN0VVJMIGhhc1ByZWZpeDog
W05TU3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5nOiAiaHR0cDoiXV0gfHwgW2xvd2VyY2FzZVRlc3RV
UkwgaGFzUHJlZml4OiBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6ICJodHRwczoiXV0pIHsK
KyAgICAgICAgICAgIE5TVVJMICp0ZXN0VVJMID0gW1tOU1VSTCBhbGxvY10gaW5pdFdpdGhTdHJp
bmc6IHRlc3RVUkxTdHJpbmddOworICAgICAgICAgICAgdGVzdEhvc3QgPSB0ZXN0VVJMID8gW3Rl
c3RVUkwgaG9zdF0gOiAwOworICAgICAgICB9CisgICAgICAgIGlmICghaXNMb2NhbGhvc3QoaG9z
dCkgJiYgIWhvc3RJc1VzZWRCeVNvbWVUZXN0c1RvVG9HZW5lcmF0ZUVycm9yKGhvc3QpICYmICgh
dGVzdEhvc3QgfHwgaXNMb2NhbGhvc3QodGVzdEhvc3QpKSkgeworICAgICAgICAgICAgcHJpbnRm
KCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgJXNcbiIsIFtbdXJsIGFic29sdXRlU3Ry
aW5nXSBjU3RyaW5nVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOworICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChkaXNhbGxvd2Vk
VVJMcyAmJiBDRlNldENvbnRhaW5zVmFsdWUoZGlzYWxsb3dlZFVSTHMsIHVybCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143603</attachid>
            <date>2012-05-23 11:42:44 -0700</date>
            <delta_ts>2012-05-23 13:08:18 -0700</delta_ts>
            <desc>More fixes per Alexey&apos;s comment</desc>
            <filename>bug-86191-20120523114610.patch</filename>
            <type>text/plain</type>
            <size>3542</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExNzgwNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDEyLTA1LTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIE1hYyBEUlQgc2hvdWxkIGJlIGFibGUgdG8gbG9hZCBleHRlcm5hbCBVUkxzIGZv
ciByZXBsYXkgcGVyZm9ybWFuY2UgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg2MTkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTGV0IGV4dGVybmFsIFVSTCByZXF1ZXN0cyBnbyB0aHJvdWdoIGlm
IHRoZSB0ZXN0IGZpbGUgaXMgbm90IGEgbG9jYWwgZmlsZSBvciBob3N0ZWQgYXQgbG9jYWxob3N0
LgorICAgICAgICBlLmcuICJEdW1wUmVuZGVyVHJlZSBodHRwOi8vd2Via2l0Lm9yZy8iIGFzIHN1
cHBvc2VkIHRvICJEdW1wUmVuZGVyVHJlZSB0ZXN0Lmh0bWwiIG9yCisgICAgICAgICJEdW1wUmVu
ZGVyVHJlZSBodHRwOi8vbG9jYWxob3N0OjgwMDAvIi4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbToKKyAgICAgICAgKGlzTG9jYWxob3N0KToK
KyAgICAgICAgKGhvc3RJc1VzZWRCeVNvbWVUZXN0c1RvR2VuZXJhdGVFcnJvcik6CisgICAgICAg
ICgtW1Jlc291cmNlTG9hZERlbGVnYXRlIHdlYlZpZXc6cmVzb3VyY2U6d2lsbFNlbmRSZXF1ZXN0
OnJlZGlyZWN0UmVzcG9uc2U6ZnJvbURhdGFTb3VyY2U6XSk6CisKIDIwMTItMDUtMjEgIERpcmsg
UHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgd2Via2l0cHk6IGNsZWFu
IHVwIHRoZSBUZXN0RXhwZWN0YXRpb25zIGNvbnN0cnVjdG9yCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Jlc291cmNlTG9hZERlbGVnYXRlLm1tCShyZXZpc2lvbiAxMTc4
MDYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsMTcgQEAgLSAoaWQpd2ViVmlldzogKFdlYlZp
ZXcgKil3diBpZGVudGlmaWVyRgogICAgIHJldHVybiBAIjx1bmtub3duPiI7CiB9CiAKK0JPT0wg
aXNMb2NhbGhvc3QoTlNTdHJpbmcgKmhvc3QpCit7CisgICAgLy8gRklYTUU6IFN1cHBvcnQgSVB2
NiBsb29wYmFja3MKKyAgICByZXR1cm4gTlNPcmRlcmVkU2FtZSA9PSBbaG9zdCBjb21wYXJlOkAi
MTI3LjAuMC4xIl0gfHwgTlNPcmRlcmVkU2FtZSA9PSBbaG9zdCBjYXNlSW5zZW5zaXRpdmVDb21w
YXJlOkAibG9jYWxob3N0Il07Cit9CisKK0JPT0wgaG9zdElzVXNlZEJ5U29tZVRlc3RzVG9HZW5l
cmF0ZUVycm9yKE5TU3RyaW5nICpob3N0KQoreworICAgIHJldHVybiBOU09yZGVyZWRTYW1lID09
IFtob3N0IGNvbXBhcmU6QCIyNTUuMjU1LjI1NS4yNTUiXTsKK30KKwogLShOU1VSTFJlcXVlc3Qg
Kil3ZWJWaWV3OiAoV2ViVmlldyAqKXd2IHJlc291cmNlOmlkZW50aWZpZXIgd2lsbFNlbmRSZXF1
ZXN0OiAoTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCByZWRpcmVjdFJlc3BvbnNlOihOU1VSTFJlc3Bv
bnNlICopcmVkaXJlY3RSZXNwb25zZSBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRh
dGFTb3VyY2UKIHsKICAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKQEAgLTE0OSwxMyArMTYwLDE2IEBAIC0oTlNVUkxS
ZXF1ZXN0ICopd2ViVmlldzogKFdlYlZpZXcgKil3diAKIAogICAgIE5TVVJMICp1cmwgPSBbcmVx
dWVzdCBVUkxdOwogICAgIE5TU3RyaW5nICpob3N0ID0gW3VybCBob3N0XTsKLSAgICBpZiAoaG9z
dAotICAgICAgICAmJiAoTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNlbnNp
dGl2ZUNvbXBhcmU6QCJodHRwIl0gfHwgTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVdIGNh
c2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRwcyJdKQotICAgICAgICAmJiBOU09yZGVyZWRTYW1l
ICE9IFtob3N0IGNvbXBhcmU6QCIxMjcuMC4wLjEiXQotICAgICAgICAmJiBOU09yZGVyZWRTYW1l
ICE9IFtob3N0IGNvbXBhcmU6QCIyNTUuMjU1LjI1NS4yNTUiXSAvLyB1c2VkIGluIHNvbWUgdGVz
dHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3IKLSAgICAgICAgJiYgTlNPcmRlcmVk
U2FtZSAhPSBbaG9zdCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAibG9jYWxob3N0Il0pIHsKLSAg
ICAgICAgcHJpbnRmKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgJXNcbiIsIFtbdXJs
IGFic29sdXRlU3RyaW5nXSBjU3RyaW5nVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10pOwotICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChob3N0ICYmIChOU09yZGVyZWRTYW1l
ID09IFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImh0dHAiXSB8fCBOU09y
ZGVyZWRTYW1lID09IFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImh0dHBz
Il0pKSB7CisgICAgICAgIE5TU3RyaW5nICp0ZXN0UGF0aE9yVVJMID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhVVEY4U3RyaW5nOmdMYXlvdXRUZXN0Q29udHJvbGxlci0+dGVzdFBhdGhPclVSTCgpLmNf
c3RyKCldOworICAgICAgICBOU1N0cmluZyAqbG93ZXJjYXNlVGVzdFVSTCA9IFt0ZXN0UGF0aE9y
VVJMIGxvd2VyY2FzZVN0cmluZ107CisgICAgICAgIE5TU3RyaW5nICp0ZXN0SG9zdCA9IDA7Cisg
ICAgICAgIGlmIChbbG93ZXJjYXNlVGVzdFVSTCBoYXNQcmVmaXg6QCJodHRwOiJdIHx8IFtsb3dl
cmNhc2VUZXN0VVJMIGhhc1ByZWZpeDpAImh0dHBzOiJdKQorICAgICAgICAgICAgdGVzdEhvc3Qg
PSBbW05TVVJMIFVSTFdpdGhTdHJpbmc6dGVzdFBhdGhPclVSTF0gaG9zdF07CisgICAgICAgIGlm
ICghaXNMb2NhbGhvc3QoaG9zdCkgJiYgIWhvc3RJc1VzZWRCeVNvbWVUZXN0c1RvR2VuZXJhdGVF
cnJvcihob3N0KSAmJiAoIXRlc3RIb3N0IHx8IGlzTG9jYWxob3N0KHRlc3RIb3N0KSkpIHsKKyAg
ICAgICAgICAgIHByaW50ZigiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICVzXG4iLCBb
W3VybCBhYnNvbHV0ZVN0cmluZ10gY1N0cmluZ1VzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmddKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBpZiAoZGlzYWxsb3dlZFVSTHMgJiYgQ0ZTZXRDb250YWluc1ZhbHVlKGRpc2FsbG93ZWRVUkxz
LCB1cmwpKQo=
</data>
<flag name="review"
          id="150211"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>