<?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>26994</bug_id>
          
          <creation_ts>2009-07-06 09:43:21 -0700</creation_ts>
          <short_desc>Store non-standard HTTP headers in history</short_desc>
          <delta_ts>2023-03-27 05:35:18 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Marshall Greenblatt">magreenblatt</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annevk</cc>
    
    <cc>ap</cc>
    
    <cc>magreenblatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129961</commentid>
    <comment_count>0</comment_count>
    <who name="Marshall Greenblatt">magreenblatt</who>
    <bug_when>2009-07-06 09:43:21 -0700</bug_when>
    <thetext>Non-standard HTTP headers, usually prefixed with &apos;X-&apos;, are used by a number of server-based applications. It is currently possible to create an NSMutableURLRequest that contains non-standard HTTP headers and load that request via a call to WebFrame::loadRequest(). If the request is then re-loaded via a call to WebFrame::reload() the non-standard HTTP headers are remembered and re-submitted. However, if the request is loaded by navigating the history then the non-standard HTTP headers will have been lost and will not be re-submitted. To address what I believe is an API omission I propose that WebCore::HistoryItem be modified to store non-standard HTTP headers so that they can be re-submitted when the user navigates back to the request via the history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149435</commentid>
    <comment_count>1</comment_count>
      <attachid>40005</attachid>
    <who name="Marshall Greenblatt">magreenblatt</who>
    <bug_when>2009-09-23 10:30:57 -0700</bug_when>
    <thetext>Created attachment 40005
Patch #1 to resolve bug 26994.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149449</commentid>
    <comment_count>2</comment_count>
      <attachid>40005</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-23 10:53:43 -0700</bug_when>
    <thetext>Comment on attachment 40005
Patch #1 to resolve bug 26994.

&gt; +        if (it-&gt;first.find(&quot;X-&quot;) == 0)

This is not the correct way to check for a prefix. It wastefully searches the entire string for &quot;X-&quot;. There&apos;s a startsWith function that can be used for this purpose. But also, should this be a case-sensitive check or case-insensitive?

Why keep the extra headers in a map instead of just in a vector of pairs? Do we need efficient key lookup for some reason.

I don&apos;t understand the concept of this patch; why are headers the start with &quot;x-&quot; different from others? I suspect this is the wrong approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149464</commentid>
    <comment_count>3</comment_count>
    <who name="Marshall Greenblatt">magreenblatt</who>
    <bug_when>2009-09-23 11:48:00 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 40005 [details])
&gt; &gt; +        if (it-&gt;first.find(&quot;X-&quot;) == 0)
&gt; 
&gt; This is not the correct way to check for a prefix. It wastefully searches the
&gt; entire string for &quot;X-&quot;. There&apos;s a startsWith function that can be used for this
&gt; purpose. But also, should this be a case-sensitive check or case-insensitive?

I&apos;ll make the changes that you suggest. Case-insensitive matching is not a requirement but would be acceptable.

&gt; 
&gt; Why keep the extra headers in a map instead of just in a vector of pairs? Do we
&gt; need efficient key lookup for some reason.

Efficient key lookup is not a priority for this usage case. I chose this particular implementation to be consistent with the ResourceRequest implementation.  Perhaps a better overall approach would be having HistoryItem store a ResourceRequest object internally instead of duplicating many of the same members.

&gt; 
&gt; I don&apos;t understand the concept of this patch; why are headers the start with
&gt; &quot;x-&quot; different from others? I suspect this is the wrong approach.

Some web applications use custom headers to extend an HTTP request. The convention is to prefix the header name with X- to indicate that it is non-standard.  This is a reasonably well-documented approach -- see, for instance, section 2.1 of the following (expired) draft specification:

http://www.mnot.net/drafts/draft-nottingham-hdrreg-http/draft-nottingham-hdrreg-http-00.txt

Searching only for headers that begin with X- implicitly excludes all standard headers.  An alternative approach would be explicitly excluding all standard headers that are either stored separately or should not be stored as part of the history such as Host, Cookie, Content-Length, Accept, User-Agent, Referrer, Content-Type, etc.  Either approach would be valid but I think the current implicit approach is more manageable from both an implementation and documentation standpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149479</commentid>
    <comment_count>4</comment_count>
      <attachid>40013</attachid>
    <who name="Marshall Greenblatt">magreenblatt</who>
    <bug_when>2009-09-23 12:55:55 -0700</bug_when>
    <thetext>Created attachment 40013
Patch #2 to resolve bug 26994.

This update fixes startsWith issue and ignores case for &quot;X-&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149480</commentid>
    <comment_count>5</comment_count>
      <attachid>40013</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-23 13:01:16 -0700</bug_when>
    <thetext>Comment on attachment 40013
Patch #2 to resolve bug 26994.

This patch is going to need a regression test -- should be easy to make one of our http tests to test this.

Also, it would be good to have an example of a website where the change makes a WebKit-based browser work better with the site.

it-&gt;first.startsWith(&quot;x-&quot;, false) is what you want for case sensitivity.

I don&apos;t think that using &quot;x-&quot; prefixed headers only is the right way to go about this. Something that instead involved some sort of whitelist would be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149489</commentid>
    <comment_count>6</comment_count>
    <who name="Marshall Greenblatt">magreenblatt</who>
    <bug_when>2009-09-23 13:35:09 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 40013 [details])
&gt; This patch is going to need a regression test -- should be easy to make one of
&gt; our http tests to test this.

I agree, I&apos;ll work on that.

&gt; 
&gt; Also, it would be good to have an example of a website where the change makes a
&gt; WebKit-based browser work better with the site.

Normal web browsing won&apos;t cause non-standard HTTP request headers to be sent so this capability would be used mainly by applications embedding WebKit or by extensions loaded into a WebKit-based browser.  A good use-case for this capability would be an extension implementing a WebDAV report viewer. WebDAV uses a number of non-standard HTTP header fields:

http://www.webdav.org/specs/rfc2518.html#http.headers.for.distributed.authoring

The extension would modify the display of the WebDAV report, perhaps adding a search form and/or hyperlinks.  When the user interacts with these elements the extension sets the extra HTTP headers and submits the request.  WebKit can then transparently handle history navigation by storing those extra HTTP header values.

&gt; 
&gt; it-&gt;first.startsWith(&quot;x-&quot;, false) is what you want for case sensitivity.
&gt; 
&gt; I don&apos;t think that using &quot;x-&quot; prefixed headers only is the right way to go
&gt; about this. Something that instead involved some sort of whitelist would be
&gt; better.

The WebDAV header fields don&apos;t begin with &quot;X-&quot; so that&apos;s a good argument for not restricting the use to &quot;X-&quot; headers only.  How would you want to see the whitelist concept implemented?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149551</commentid>
    <comment_count>7</comment_count>
      <attachid>40031</attachid>
    <who name="Marshall Greenblatt">magreenblatt</who>
    <bug_when>2009-09-23 17:02:51 -0700</bug_when>
    <thetext>Created attachment 40031
Patch #3 to resolve bug 26994

This patch addresses the HTTP header whitelist issue by offloading the test to the client.  It adds a new FrameLoaderClient::canStoreHTTPHeaderFieldInHistory() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149664</commentid>
    <comment_count>8</comment_count>
      <attachid>40031</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-23 22:42:11 -0700</bug_when>
    <thetext>Comment on attachment 40031
Patch #3 to resolve bug 26994

Why would different clients want to store different headers in the history item?  It seems like we should store all the headers except some specific list of headers that are problematic.  (Which are the problematic headers?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149746</commentid>
    <comment_count>9</comment_count>
    <who name="Marshall Greenblatt">magreenblatt</who>
    <bug_when>2009-09-24 06:57:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 40031 [details])
&gt; Why would different clients want to store different headers in the history
&gt; item?  It seems like we should store all the headers except some specific list
&gt; of headers that are problematic.  (Which are the problematic headers?)

Headers in any of the following categories should not be stored in the history.

1. Transfer and/or content negotiation.

Accept-Ranges, Content-Encoding, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Type, If-Range, Range, TE, Trailer, Transfer-Encoding, Via

2. Managed state information.

Authorization, Cookie, Host, Proxy-Authorization, Referer.

3. Browser capabilities.

Accept, Accept-Charset, Accept-Encoding, Accept-Language, Expect, Upgrade, User-Agent.


Am I missing any?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149763</commentid>
    <comment_count>10</comment_count>
      <attachid>40068</attachid>
    <who name="Marshall Greenblatt">magreenblatt</who>
    <bug_when>2009-09-24 09:03:43 -0700</bug_when>
    <thetext>Created attachment 40068
Patch #4 to resolve bug 26994

Use a fixed list of excluded headers in HistoryItem.  Also exclude the Origin header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154448</commentid>
    <comment_count>11</comment_count>
      <attachid>40068</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-13 14:55:26 -0700</bug_when>
    <thetext>Comment on attachment 40068
Patch #4 to resolve bug 26994

Darin asked for a regression test, but you did not provide one.  Also, this patch is missing a ChangeLog.

In general, this header list seems to overlap significantly with the XMLHttpRequest black list.  Are the lists actually the same?  Is one a subset of the other?  I&apos;d like to see an explanation of any differences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1944181</commentid>
    <comment_count>12</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2023-03-27 05:35:18 -0700</bug_when>
    <thetext>Closing as there was no follow-up and this also doesn&apos;t seem like something we&apos;d want.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40005</attachid>
            <date>2009-09-23 10:30:57 -0700</date>
            <delta_ts>2009-09-23 12:55:55 -0700</delta_ts>
            <desc>Patch #1 to resolve bug 26994.</desc>
            <filename>26994-01.patch</filename>
            <type>text/plain</type>
            <size>3148</size>
            <attacher name="Marshall Greenblatt">magreenblatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaGlzdG9yeS9I
aXN0b3J5SXRlbS5jcHAJKHJldmlzaW9uIDQ4NTg1KQ0KKysrIGhpc3RvcnkvSGlzdG9yeUl0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNDQ3LDkgKzQ0NywyNyBAQA0KICAgICByZXR1cm4gbV9m
b3JtQ29udGVudFR5cGU7CiB9CiAKK3ZvaWQgSGlzdG9yeUl0ZW06OnNldEV4dHJhSFRUUEhlYWRl
cihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgbV9leHRy
YUhUVFBIZWFkZXJzTWFwLnNldChuYW1lLCB2YWx1ZSk7Cit9CisKK2NvbnN0IEhUVFBIZWFkZXJN
YXAmIEhpc3RvcnlJdGVtOjpleHRyYUhUVFBIZWFkZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9leHRyYUhUVFBIZWFkZXJzTWFwOworfQorCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRGb3JtSW5m
b0Zyb21SZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBtX3Jl
ZmVycmVyID0gcmVxdWVzdC5odHRwUmVmZXJyZXIoKTsKKworICAgIC8vIFN0b3JlIHRoZSBleHRy
YSBub24tc3RhbmRhcmQgSFRUUCBoZWFkZXJzIChoZWFkZXJzIGJlZ2lubmluZyB3aXRoICJYLSIp
LgorICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlck1hcCA9IHJlcXVlc3QuaHR0cEhlYWRl
ckZpZWxkcygpOworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVy
TWFwLmJlZ2luKCk7CisgICAgZm9yICg7IGl0ICE9IGhlYWRlck1hcC5lbmQoKTsgKytpdCkgewor
ICAgICAgICBpZiAoaXQtPmZpcnN0LmZpbmQoIlgtIikgPT0gMCkKKyAgICAgICAgICAgIG1fZXh0
cmFIVFRQSGVhZGVyc01hcC5zZXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICB9CiAgICAg
CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlcXVlc3QuaHR0cE1ldGhvZCgpLCAiUE9TVCIp
KSB7CiAgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIGhhdmUgdG8gbWFrZSB0aGlzIHNt
YXJ0IGVub3VnaCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUKQEAgLTQ3Miw2ICs0OTAsNyBAQA0K
ICAgICBtX2Zvcm1Db250ZW50VHlwZSA9IGZvcm1Db250ZW50VHlwZTsKIH0KIAorCiBGb3JtRGF0
YSogSGlzdG9yeUl0ZW06OmZvcm1EYXRhKCkKIHsKICAgICByZXR1cm4gbV9mb3JtRGF0YS5nZXQo
KTsKSW5kZXg6IGhpc3RvcnkvSGlzdG9yeUl0ZW0uaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGhpc3Rvcnkv
SGlzdG9yeUl0ZW0uaAkocmV2aXNpb24gNDg1ODUpDQorKysgaGlzdG9yeS9IaXN0b3J5SXRlbS5o
CSh3b3JraW5nIGNvcHkpDQpAQCAtMjcsNiArMjcsNyBAQA0KICNkZWZpbmUgSGlzdG9yeUl0ZW1f
aAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTEwMiw2ICsxMDMsNyBAQA0KICAgICBjb25zdCBT
dHJpbmcmIHJlZmVycmVyKCkgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiB0YXJnZXQoKSBjb25z
dDsKICAgICBib29sIGlzVGFyZ2V0SXRlbSgpIGNvbnN0OworICAgIGNvbnN0IEhUVFBIZWFkZXJN
YXAmIGV4dHJhSFRUUEhlYWRlcnMoKSBjb25zdDsKICAgICAKICAgICBGb3JtRGF0YSogZm9ybURh
dGEoKTsKICAgICBTdHJpbmcgZm9ybUNvbnRlbnRUeXBlKCkgY29uc3Q7CkBAIC0xMjcsNiArMTI5
LDcgQEANCiAgICAgdm9pZCBzZXRQYXJlbnQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRU
aXRsZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldElzVGFyZ2V0SXRlbShib29sKTsKKyAg
ICB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsK
ICAgICAKICAgICB2b2lkIHNldEZvcm1JbmZvRnJvbVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0Jik7CiAgICAgdm9pZCBzZXRGb3JtRGF0YShQYXNzUmVmUHRyPEZvcm1EYXRhPik7CkBAIC0y
MzAsNiArMjMzLDggQEANCiAgICAgUmVmUHRyPEZvcm1EYXRhPiBtX2Zvcm1EYXRhOwogICAgIFN0
cmluZyBtX2Zvcm1Db250ZW50VHlwZTsKIAorICAgIEhUVFBIZWFkZXJNYXAgbV9leHRyYUhUVFBI
ZWFkZXJzTWFwOworCiAgICAgLy8gUGFnZUNhY2hlIGNvbnRyb2xzIHRoZXNlIGZpZWxkcy4KICAg
ICBIaXN0b3J5SXRlbSogbV9uZXh0OwogICAgIEhpc3RvcnlJdGVtKiBtX3ByZXY7CkluZGV4OiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkocmV2aXNpb24gNDg1ODUpDQorKysgbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQ0KQEAgLTQ2NTgsNiArNDY1OCwxMyBAQA0KIAogICAgICAgICAgICAgICAgIGFjdGlv
biA9IE5hdmlnYXRpb25BY3Rpb24oaXRlbU9yaWdpbmFsVVJMLCBsb2FkVHlwZSwgZmFsc2UpOwog
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJN
YXAgPSBpdGVtLT5leHRyYUhUVFBIZWFkZXJzKCk7CisgICAgICAgICAgICBpZiAoaGVhZGVyTWFw
LnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGhlYWRlck1hcC5iZWdpbigpOworICAgICAgICAgICAgICAgIGZvciAoOyBpdCAh
PSBoZWFkZXJNYXAuZW5kKCk7ICsraXQpCisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRk
SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghYWRkZWRFeHRyYUZpZWxkcykKICAgICAgICAg
ICAgICAgICBhZGRFeHRyYUZpZWxkc1RvUmVxdWVzdChyZXF1ZXN0LCBtX2xvYWRUeXBlLCB0cnVl
LCBmb3JtRGF0YSk7Cg==
</data>
<flag name="review"
          id="21159"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40013</attachid>
            <date>2009-09-23 12:55:55 -0700</date>
            <delta_ts>2009-09-23 17:02:51 -0700</delta_ts>
            <desc>Patch #2 to resolve bug 26994.</desc>
            <filename>26994-02.patch</filename>
            <type>text/plain</type>
            <size>3041</size>
            <attacher name="Marshall Greenblatt">magreenblatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaGlzdG9yeS9I
aXN0b3J5SXRlbS5jcHAJKHJldmlzaW9uIDQ4NTg1KQ0KKysrIGhpc3RvcnkvSGlzdG9yeUl0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNDQ3LDkgKzQ0NywyNyBAQA0KICAgICByZXR1cm4gbV9m
b3JtQ29udGVudFR5cGU7CiB9CiAKK3ZvaWQgSGlzdG9yeUl0ZW06OnNldEV4dHJhSFRUUEhlYWRl
cihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgbV9leHRy
YUhUVFBIZWFkZXJzTWFwLnNldChuYW1lLCB2YWx1ZSk7Cit9CisKK2NvbnN0IEhUVFBIZWFkZXJN
YXAmIEhpc3RvcnlJdGVtOjpleHRyYUhUVFBIZWFkZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9leHRyYUhUVFBIZWFkZXJzTWFwOworfQorCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRGb3JtSW5m
b0Zyb21SZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBtX3Jl
ZmVycmVyID0gcmVxdWVzdC5odHRwUmVmZXJyZXIoKTsKKworICAgIC8vIFN0b3JlIHRoZSBleHRy
YSBub24tc3RhbmRhcmQgSFRUUCBoZWFkZXJzIChoZWFkZXJzIGJlZ2lubmluZyB3aXRoICJYLSIp
LgorICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlck1hcCA9IHJlcXVlc3QuaHR0cEhlYWRl
ckZpZWxkcygpOworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVy
TWFwLmJlZ2luKCk7CisgICAgZm9yICg7IGl0ICE9IGhlYWRlck1hcC5lbmQoKTsgKytpdCkgewor
ICAgICAgICBpZiAoaXQtPmZpcnN0LnN0YXJ0c1dpdGgoIlgtIikgfHwgaXQtPmZpcnN0LnN0YXJ0
c1dpdGgoIngtIikpCisgICAgICAgICAgICBtX2V4dHJhSFRUUEhlYWRlcnNNYXAuc2V0KGl0LT5m
aXJzdCwgaXQtPnNlY29uZCk7CisgICAgfQogICAgIAogICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIlBPU1QiKSkgewogICAgICAgICAvLyBGSVhNRTogRXZl
bnR1YWxseSB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBzbWFydCBlbm91Z2ggdG8gaGFuZGxlIHRoZSBj
YXNlIHdoZXJlCkluZGV4OiBoaXN0b3J5L0hpc3RvcnlJdGVtLmgNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBo
aXN0b3J5L0hpc3RvcnlJdGVtLmgJKHJldmlzaW9uIDQ4NTg1KQ0KKysrIGhpc3RvcnkvSGlzdG9y
eUl0ZW0uaAkod29ya2luZyBjb3B5KQ0KQEAgLTI3LDYgKzI3LDcgQEANCiAjZGVmaW5lIEhpc3Rv
cnlJdGVtX2gKIAogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck1h
cC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xMDIsNiArMTAzLDcgQEANCiAgICAg
Y29uc3QgU3RyaW5nJiByZWZlcnJlcigpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1RhcmdldEl0ZW0oKSBjb25zdDsKKyAgICBjb25zdCBIVFRQ
SGVhZGVyTWFwJiBleHRyYUhUVFBIZWFkZXJzKCkgY29uc3Q7CiAgICAgCiAgICAgRm9ybURhdGEq
IGZvcm1EYXRhKCk7CiAgICAgU3RyaW5nIGZvcm1Db250ZW50VHlwZSgpIGNvbnN0OwpAQCAtMTI3
LDYgKzEyOSw3IEBADQogICAgIHZvaWQgc2V0UGFyZW50KGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRJc1RhcmdldEl0ZW0oYm9v
bCk7CisgICAgdm9pZCBzZXRFeHRyYUhUVFBIZWFkZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJik7CiAgICAgCiAgICAgdm9pZCBzZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpOwogICAgIHZvaWQgc2V0Rm9ybURhdGEoUGFzc1JlZlB0cjxGb3JtRGF0YT4p
OwpAQCAtMjMwLDYgKzIzMyw4IEBADQogICAgIFJlZlB0cjxGb3JtRGF0YT4gbV9mb3JtRGF0YTsK
ICAgICBTdHJpbmcgbV9mb3JtQ29udGVudFR5cGU7CiAKKyAgICBIVFRQSGVhZGVyTWFwIG1fZXh0
cmFIVFRQSGVhZGVyc01hcDsKKwogICAgIC8vIFBhZ2VDYWNoZSBjb250cm9scyB0aGVzZSBmaWVs
ZHMuCiAgICAgSGlzdG9yeUl0ZW0qIG1fbmV4dDsKICAgICBIaXN0b3J5SXRlbSogbV9wcmV2OwpJ
bmRleDogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ4NTg1KQ0KKysrIGxvYWRlci9GcmFtZUxvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkNCkBAIC00NjU4LDYgKzQ2NTgsMTMgQEANCiAKICAgICAgICAgICAgICAg
ICBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uKGl0ZW1PcmlnaW5hbFVSTCwgbG9hZFR5cGUsIGZh
bHNlKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYg
aGVhZGVyTWFwID0gaXRlbS0+ZXh0cmFIVFRQSGVhZGVycygpOworICAgICAgICAgICAgaWYgKGhl
YWRlck1hcC5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJNYXAuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KDsgaXQgIT0gaGVhZGVyTWFwLmVuZCgpOyArK2l0KQorICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWFkZGVkRXh0cmFGaWVsZHMpCiAg
ICAgICAgICAgICAgICAgYWRkRXh0cmFGaWVsZHNUb1JlcXVlc3QocmVxdWVzdCwgbV9sb2FkVHlw
ZSwgdHJ1ZSwgZm9ybURhdGEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40031</attachid>
            <date>2009-09-23 17:02:51 -0700</date>
            <delta_ts>2009-09-24 09:03:43 -0700</delta_ts>
            <desc>Patch #3 to resolve bug 26994</desc>
            <filename>26994-03.patch</filename>
            <type>text/plain</type>
            <size>6574</size>
            <attacher name="Marshall Greenblatt">magreenblatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaGlzdG9yeS9I
aXN0b3J5SXRlbS5jcHAJKHJldmlzaW9uIDQ4NTg1KQ0KKysrIGhpc3RvcnkvSGlzdG9yeUl0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNDQ3LDEwICs0NDcsMjAgQEANCiAgICAgcmV0dXJuIG1f
Zm9ybUNvbnRlbnRUeXBlOwogfQogCit2b2lkIEhpc3RvcnlJdGVtOjpzZXRIVFRQSGVhZGVyRmll
bGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1faHR0
cEhlYWRlcnNNYXAuc2V0KG5hbWUsIHZhbHVlKTsKK30KKworY29uc3QgSFRUUEhlYWRlck1hcCYg
SGlzdG9yeUl0ZW06Omh0dHBIZWFkZXJGaWVsZHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2h0
dHBIZWFkZXJzTWFwOworfQorCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRGb3JtSW5mb0Zyb21SZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBtX3JlZmVycmVyID0g
cmVxdWVzdC5odHRwUmVmZXJyZXIoKTsKLSAgICAKKwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIlBPU1QiKSkgewogICAgICAgICAvLyBGSVhNRTogRXZl
bnR1YWxseSB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBzbWFydCBlbm91Z2ggdG8gaGFuZGxlIHRoZSBj
YXNlIHdoZXJlCiAgICAgICAgIC8vIHdlIGhhdmUgYSBzdHJlYW0gZm9yIHRoZSBib2R5IHRvIGhh
bmRsZSB0aGUgImRhdGEgaW50ZXJzcGVyc2VkIHdpdGggZmlsZXMiIGZlYXR1cmUuCkluZGV4OiBo
aXN0b3J5L0hpc3RvcnlJdGVtLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBoaXN0b3J5L0hpc3RvcnlJdGVt
LmgJKHJldmlzaW9uIDQ4NTg1KQ0KKysrIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaAkod29ya2luZyBj
b3B5KQ0KQEAgLTI3LDYgKzI3LDcgQEANCiAjZGVmaW5lIEhpc3RvcnlJdGVtX2gKIAogI2luY2x1
ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CkBAIC0xMDIsNiArMTAzLDcgQEANCiAgICAgY29uc3QgU3RyaW5nJiByZWZl
cnJlcigpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9v
bCBpc1RhcmdldEl0ZW0oKSBjb25zdDsKKyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBodHRwSGVh
ZGVyRmllbGRzKCkgY29uc3Q7CiAgICAgCiAgICAgRm9ybURhdGEqIGZvcm1EYXRhKCk7CiAgICAg
U3RyaW5nIGZvcm1Db250ZW50VHlwZSgpIGNvbnN0OwpAQCAtMTI3LDYgKzEyOSw3IEBADQogICAg
IHZvaWQgc2V0UGFyZW50KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0VGl0bGUoY29uc3Qg
U3RyaW5nJik7CiAgICAgdm9pZCBzZXRJc1RhcmdldEl0ZW0oYm9vbCk7CisgICAgdm9pZCBzZXRI
VFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAgICAgCiAgICAg
dm9pZCBzZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAg
IHZvaWQgc2V0Rm9ybURhdGEoUGFzc1JlZlB0cjxGb3JtRGF0YT4pOwpAQCAtMjMwLDYgKzIzMyw4
IEBADQogICAgIFJlZlB0cjxGb3JtRGF0YT4gbV9mb3JtRGF0YTsKICAgICBTdHJpbmcgbV9mb3Jt
Q29udGVudFR5cGU7CiAKKyAgICBIVFRQSGVhZGVyTWFwIG1faHR0cEhlYWRlcnNNYXA7CisKICAg
ICAvLyBQYWdlQ2FjaGUgY29udHJvbHMgdGhlc2UgZmllbGRzLgogICAgIEhpc3RvcnlJdGVtKiBt
X25leHQ7CiAgICAgSGlzdG9yeUl0ZW0qIG1fcHJldjsKSW5kZXg6IGxvYWRlci9FbXB0eUNsaWVu
dHMuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIGxvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNDg1
ODUpDQorKysgbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMjU2LDYg
KzI1Niw3IEBADQogCiAgICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
Y2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGNhblN0b3JlSFRUUEhlYWRlckZpZWxkSW5IaXN0b3J5KGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5
cGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJikgY29uc3QgeyByZXR1cm4gIiI7IH0KIApJbmRl
eDogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQ4NTg1KQ0KKysrIGxvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkNCkBAIC00MzU0LDkgKzQzNTQsOSBAQA0KICAgICAvLyBTYXZlIGZvcm0gc3Rh
dGUgaWYgdGhpcyBpcyBhIFBPU1QKICAgICBpZiAoZG9jTG9hZGVyKSB7CiAgICAgICAgIGlmICh1
c2VPcmlnaW5hbCkKLSAgICAgICAgICAgIGl0ZW0tPnNldEZvcm1JbmZvRnJvbVJlcXVlc3QoZG9j
TG9hZGVyLT5vcmlnaW5hbFJlcXVlc3QoKSk7CisgICAgICAgICAgICBzZXRIaXN0b3J5SXRlbUZy
b21SZXF1ZXN0KGl0ZW0sIGRvY0xvYWRlci0+b3JpZ2luYWxSZXF1ZXN0KCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBpdGVtLT5zZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KGRvY0xvYWRlci0+
cmVxdWVzdCgpKTsKKyAgICAgICAgICAgIHNldEhpc3RvcnlJdGVtRnJvbVJlcXVlc3QoaXRlbSwg
ZG9jTG9hZGVyLT5yZXF1ZXN0KCkpOwogICAgIH0KICAgICAKICAgICAvLyBTZXQgdGhlIGl0ZW0g
Zm9yIHdoaWNoIHdlIHdpbGwgc2F2ZSBkb2N1bWVudCBzdGF0ZQpAQCAtNDQxOSw2ICs0NDE5LDE5
IEBADQogICAgIHJldHVybiBiZkl0ZW07CiB9CiAKK3ZvaWQgRnJhbWVMb2FkZXI6OnNldEhpc3Rv
cnlJdGVtRnJvbVJlcXVlc3QoUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGl0ZW0tPnNldEZvcm1JbmZvRnJvbVJlcXVl
c3QocmVxdWVzdCk7CisKKyAgICAvLyBTdG9yZSBhcHByb3ZlZCBIVFRQIGhlYWRlcnMKKyAgICBj
b25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXAgPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMo
KTsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlck1hcC5iZWdp
bigpOworICAgIGZvciAoOyBpdCAhPSBoZWFkZXJNYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAg
aWYgKG1fY2xpZW50LT5jYW5TdG9yZUhUVFBIZWFkZXJGaWVsZEluSGlzdG9yeShpdC0+Zmlyc3Qs
IGl0LT5zZWNvbmQpKQorICAgICAgICAgICAgaXRlbS0+c2V0SFRUUEhlYWRlckZpZWxkKGl0LT5m
aXJzdCwgaXQtPnNlY29uZCk7CisgICAgfQorfQorCiBGcmFtZSogRnJhbWVMb2FkZXI6OmZpbmRG
cmFtZUZvck5hdmlnYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIEZyYW1l
KiBmcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+ZmluZChuYW1lKTsKQEAgLTQ2NTgsNiArNDY3MSwx
MyBAQA0KIAogICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5hdmlnYXRpb25BY3Rpb24oaXRlbU9y
aWdpbmFsVVJMLCBsb2FkVHlwZSwgZmFsc2UpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXAgPSBpdGVtLT5odHRwSGVhZGVyRmllbGRz
KCk7CisgICAgICAgICAgICBpZiAoaGVhZGVyTWFwLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAg
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlck1hcC5iZWdpbigp
OworICAgICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBoZWFkZXJNYXAuZW5kKCk7ICsraXQpCisg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwg
aXQtPnNlY29uZCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
ICghYWRkZWRFeHRyYUZpZWxkcykKICAgICAgICAgICAgICAgICBhZGRFeHRyYUZpZWxkc1RvUmVx
dWVzdChyZXF1ZXN0LCBtX2xvYWRUeXBlLCB0cnVlLCBmb3JtRGF0YSk7CkBAIC00ODE3LDcgKzQ4
MzcsNyBAQA0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+dW5y
ZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgbV9jdXJyZW50SGlzdG9yeUl0ZW0pIHsKICAgICAg
ICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldFVSTChkb2N1bWVudExvYWRlcigpLT51cmwoKSk7
Ci0gICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5zZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KGRv
Y3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSk7CisgICAgICAgIHNldEhpc3RvcnlJdGVtRnJvbVJl
cXVlc3QobV9jdXJyZW50SGlzdG9yeUl0ZW0sIGRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSk7
CiAgICAgfQogCiAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kp
IHsKQEAgLTQ5MTAsNyArNDkzMCw3IEBADQogICAgICAgICB9CiAgICAgICAgIGlmIChtX2N1cnJl
bnRIaXN0b3J5SXRlbSkgewogICAgICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldFVS
TChkb2N1bWVudExvYWRlcigpLT51cmwoKSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRIaXN0b3J5
SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChkb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkp
OworICAgICAgICAgICAgc2V0SGlzdG9yeUl0ZW1Gcm9tUmVxdWVzdChtX2N1cnJlbnRIaXN0b3J5
SXRlbSwgZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCk7CkluZGV4OiBsb2FkZXIvRnJhbWVMb2FkZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxvYWRlci9G
cmFtZUxvYWRlci5oCShyZXZpc2lvbiA0ODU4NSkNCisrKyBsb2FkZXIvRnJhbWVMb2FkZXIuaAko
d29ya2luZyBjb3B5KQ0KQEAgLTM4Niw2ICszODYsNyBAQA0KICAgICBwcml2YXRlOgogICAgICAg
ICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjcmVhdGVIaXN0b3J5SXRlbShib29sIHVzZU9yaWdp
bmFsKTsKICAgICAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlSGlzdG9yeUl0ZW1U
cmVlKEZyYW1lKiB0YXJnZXRGcmFtZSwgYm9vbCBjbGlwQXRUYXJnZXQpOworICAgICAgICB2b2lk
IHNldEhpc3RvcnlJdGVtRnJvbVJlcXVlc3QoUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKIAogICAgICAgICBib29sIGNhbkNhY2hl
UGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoKTsKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBsb2FkZXIv
RnJhbWVMb2FkZXJDbGllbnQuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxvYWRlci9GcmFtZUxvYWRlckNs
aWVudC5oCShyZXZpc2lvbiA0ODU4NSkNCisrKyBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAko
d29ya2luZyBjb3B5KQ0KQEAgLTE4Nyw2ICsxODcsNyBAQA0KIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlw
ZSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuU3RvcmVIVFRQSGVhZGVyRmll
bGRJbkhpc3RvcnkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25z
dCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNj
aGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFs
IFN0cmluZyBnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNj
aGVtZSkgY29uc3QgPSAwOwogCg==
</data>
<flag name="review"
          id="21192"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40068</attachid>
            <date>2009-09-24 09:03:43 -0700</date>
            <delta_ts>2010-06-10 19:17:49 -0700</delta_ts>
            <desc>Patch #4 to resolve bug 26994</desc>
            <filename>26994-04.patch</filename>
            <type>text/plain</type>
            <size>4456</size>
            <attacher name="Marshall Greenblatt">magreenblatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaGlzdG9yeS9I
aXN0b3J5SXRlbS5jcHAJKHJldmlzaW9uIDQ4NTg1KQ0KKysrIGhpc3RvcnkvSGlzdG9yeUl0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNDQ3LDEwICs0NDcsNjggQEANCiAgICAgcmV0dXJuIG1f
Zm9ybUNvbnRlbnRUeXBlOwogfQogCit2b2lkIEhpc3RvcnlJdGVtOjpzZXRIVFRQSGVhZGVyRmll
bGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1faHR0
cEhlYWRlcnNNYXAuc2V0KG5hbWUsIHZhbHVlKTsKK30KKworY29uc3QgSFRUUEhlYWRlck1hcCYg
SGlzdG9yeUl0ZW06Omh0dHBIZWFkZXJGaWVsZHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2h0
dHBIZWFkZXJzTWFwOworfQorCitib29sIEhpc3RvcnlJdGVtOjpleGNsdWRlSFRUUEhlYWRlckZy
b21TdG9yYWdlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICAvLyBBbGwgaGVhZGVy
IG5hbWVzIGluIHRoaXMgbGlzdCBtdXN0IGJlIGluIGxvd2VyIGNhc2UuCisgICAgc3RhdGljIGNo
YXIqIGV4Y2x1ZGVkTGlzdFtdID0geworICAgICAgICAiYWNjZXB0IiwKKyAgICAgICAgImFjY2Vw
dC1jaGFyc2V0IiwKKyAgICAgICAgImFjY2VwdC1lbmNvZGluZyIsCisgICAgICAgICJhY2NlcHQt
bGFuZ3VhZ2UiLAorICAgICAgICAiYWNjZXB0LXJhbmdlcyIsCisgICAgICAgICJhdXRob3JpemF0
aW9uIiwKKyAgICAgICAgImNvbnRlbnQtZW5jb2RpbmciLAorICAgICAgICAiY29udGVudC1sZW5n
dGgiLAorICAgICAgICAiY29udGVudC1sb2NhdGlvbiIsCisgICAgICAgICJjb250ZW50LW1kNSIs
CisgICAgICAgICJjb250ZW50LXJhbmdlIiwKKyAgICAgICAgImNvbnRlbnQtdHlwZSIsIAorICAg
ICAgICAiY29va2llIiwKKyAgICAgICAgImV4cGVjdCIsCisgICAgICAgICJob3N0IiwKKyAgICAg
ICAgImlmLXJhbmdlIiwKKyAgICAgICAgIm9yaWdpbiIsCisgICAgICAgICJwcm94eS1hdXRob3Jp
emF0aW9uIiwKKyAgICAgICAgInJhbmdlIiwKKyAgICAgICAgInJlZmVyZXIiLAorICAgICAgICAi
dGUiLAorICAgICAgICAidHJhaWxlciIsCisgICAgICAgICJ0cmFuc2Zlci1lbmNvZGluZyIsCisg
ICAgICAgICJ1cGdyYWRlIiwKKyAgICAgICAgInVzZXItYWdlbnQiLAorICAgICAgICAidmlhIiwK
KyAgICB9OworCisgICAgU3RyaW5nIG5hbWVMb3dlciA9IG5hbWUubG93ZXIoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihleGNsdWRlZExpc3QpIC8gc2l6ZW9mKGNoYXIqKTsg
KytpKSB7CisgICAgICAgIGlmIChuYW1lTG93ZXIgPT0gZXhjbHVkZWRMaXN0W2ldKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBI
aXN0b3J5SXRlbTo6c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7CiAgICAgbV9yZWZlcnJlciA9IHJlcXVlc3QuaHR0cFJlZmVycmVyKCk7Ci0g
ICAgCisKKyAgICAvLyBTdG9yZSBIVFRQIGhlYWRlcnMKKyAgICBjb25zdCBIVFRQSGVhZGVyTWFw
JiBoZWFkZXJNYXAgPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlck1hcC5iZWdpbigpOworICAgIGZvciAoOyBp
dCAhPSBoZWFkZXJNYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKCFleGNsdWRlSFRUUEhl
YWRlckZyb21TdG9yYWdlKGl0LT5maXJzdCkpCisgICAgICAgICAgICBtX2h0dHBIZWFkZXJzTWFw
LnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgIH0KKwogICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIlBPU1QiKSkgewogICAgICAgICAvLyBGSVhN
RTogRXZlbnR1YWxseSB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBzbWFydCBlbm91Z2ggdG8gaGFuZGxl
IHRoZSBjYXNlIHdoZXJlCiAgICAgICAgIC8vIHdlIGhhdmUgYSBzdHJlYW0gZm9yIHRoZSBib2R5
IHRvIGhhbmRsZSB0aGUgImRhdGEgaW50ZXJzcGVyc2VkIHdpdGggZmlsZXMiIGZlYXR1cmUuCklu
ZGV4OiBoaXN0b3J5L0hpc3RvcnlJdGVtLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBoaXN0b3J5L0hpc3Rv
cnlJdGVtLmgJKHJldmlzaW9uIDQ4NTg1KQ0KKysrIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaAkod29y
a2luZyBjb3B5KQ0KQEAgLTI3LDYgKzI3LDcgQEANCiAjZGVmaW5lIEhpc3RvcnlJdGVtX2gKIAog
I2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xMDIsNiArMTAzLDcgQEANCiAgICAgY29uc3QgU3RyaW5n
JiByZWZlcnJlcigpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0KCkgY29uc3Q7CiAg
ICAgYm9vbCBpc1RhcmdldEl0ZW0oKSBjb25zdDsKKyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBo
dHRwSGVhZGVyRmllbGRzKCkgY29uc3Q7CiAgICAgCiAgICAgRm9ybURhdGEqIGZvcm1EYXRhKCk7
CiAgICAgU3RyaW5nIGZvcm1Db250ZW50VHlwZSgpIGNvbnN0OwpAQCAtMTI3LDYgKzEyOSw3IEBA
DQogICAgIHZvaWQgc2V0UGFyZW50KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0VGl0bGUo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRJc1RhcmdldEl0ZW0oYm9vbCk7CisgICAgdm9p
ZCBzZXRIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAgICAg
CiAgICAgdm9pZCBzZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
OwogICAgIHZvaWQgc2V0Rm9ybURhdGEoUGFzc1JlZlB0cjxGb3JtRGF0YT4pOwpAQCAtMTk2LDYg
KzE5OSw5IEBADQogICAgIHZvaWQgY29sbGFwc2VEYWlseVZpc2l0c1RvV2Vla2x5KCk7CiAgICAg
dm9pZCByZWNvcmRWaXNpdEF0VGltZShkb3VibGUsIFZpc2l0Q291bnRCZWhhdmlvciA9IEluY3Jl
YXNlVmlzaXRDb3VudCk7CiAKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgSFRUUCBoZWFkZXIg
c2hvdWxkIG5vdCBiZSBzdG9yZWQgaW4gdGhlIGhpc3RvcnkKKyAgICBib29sIGV4Y2x1ZGVIVFRQ
SGVhZGVyRnJvbVN0b3JhZ2UoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKwogICAgIEhpc3Rv
cnlJdGVtKiBmaW5kVGFyZ2V0SXRlbSgpOwogCiAgICAgLyogV2hlbiBhZGRpbmcgbmV3IG1lbWJl
ciB2YXJpYWJsZXMgdG8gdGhpcyBjbGFzcywgcGxlYXNlIG5vdGlmeSB0aGUgUXQgdGVhbS4KQEAg
LTIzMCw2ICsyMzYsOCBAQA0KICAgICBSZWZQdHI8Rm9ybURhdGE+IG1fZm9ybURhdGE7CiAgICAg
U3RyaW5nIG1fZm9ybUNvbnRlbnRUeXBlOwogCisgICAgSFRUUEhlYWRlck1hcCBtX2h0dHBIZWFk
ZXJzTWFwOworCiAgICAgLy8gUGFnZUNhY2hlIGNvbnRyb2xzIHRoZXNlIGZpZWxkcy4KICAgICBI
aXN0b3J5SXRlbSogbV9uZXh0OwogICAgIEhpc3RvcnlJdGVtKiBtX3ByZXY7CkluZGV4OiBsb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAkocmV2aXNpb24gNDg1ODUpDQorKysgbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQ0KQEAgLTQ2NTgsNiArNDY1OCwxMyBAQA0KIAogICAgICAgICAgICAgICAgIGFjdGlvbiA9
IE5hdmlnYXRpb25BY3Rpb24oaXRlbU9yaWdpbmFsVVJMLCBsb2FkVHlwZSwgZmFsc2UpOwogICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXAg
PSBpdGVtLT5odHRwSGVhZGVyRmllbGRzKCk7CisgICAgICAgICAgICBpZiAoaGVhZGVyTWFwLnNp
emUoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGhlYWRlck1hcC5iZWdpbigpOworICAgICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBo
ZWFkZXJNYXAuZW5kKCk7ICsraXQpCisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkSFRU
UEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmICghYWRkZWRFeHRyYUZpZWxkcykKICAgICAgICAgICAg
ICAgICBhZGRFeHRyYUZpZWxkc1RvUmVxdWVzdChyZXF1ZXN0LCBtX2xvYWRUeXBlLCB0cnVlLCBm
b3JtRGF0YSk7Cg==
</data>
<flag name="review"
          id="21245"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>