<?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>19822</bug_id>
          
          <creation_ts>2008-06-29 23:39:34 -0700</creation_ts>
          <short_desc>REGRESSION (r30243): setting location.hash to &quot;#&quot; causes a reload</short_desc>
          <delta_ts>2008-07-18 22:48:25 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://today.ask.com/default</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>bjorn.tipling</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>jurkuipers</cc>
    
    <cc>khooyp</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>84743</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-29 23:39:34 -0700</bug_when>
    <thetext>In Safari 3.1.1, http://today.ask.com/default loads fine, but in ToT (r34883) it keeps on reloading. This is because location.hash is set to &quot;#&quot; on each load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84744</commentid>
    <comment_count>1</comment_count>
      <attachid>22004</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-29 23:40:12 -0700</bug_when>
    <thetext>Created attachment 22004
Reduction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84766</commentid>
    <comment_count>2</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-30 11:39:45 -0700</bug_when>
    <thetext>*** Bug 17627 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84768</commentid>
    <comment_count>3</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-30 11:41:51 -0700</bug_when>
    <thetext>This seems related to bug 13067.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84777</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-06-30 12:46:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/6044293&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84778</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-06-30 12:47:39 -0700</bug_when>
    <thetext>It would be interesting to know when this regressed via WebKitTools/Scripts/bisect-builds.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84781</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-06-30 13:18:30 -0700</bug_when>
    <thetext>I&apos;ve narrowed this to between r30471 and r30584</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84782</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-06-30 13:23:26 -0700</bug_when>
    <thetext>nevermind, it broke earlier than that.  sigh</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84783</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-06-30 13:24:16 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I&apos;ve narrowed this to between r30471 and r30584

Odd.  The bisect-builds script with Safari DP 4 on Leopard 10.5.4 reports:

Works: r30240  Fails: r30267</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84784</commentid>
    <comment_count>9</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-30 13:33:50 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Odd.  The bisect-builds script with Safari DP 4 on Leopard 10.5.4 reports:
&gt; 
&gt; Works: r30240  Fails: r30267

The only suspicion revision is r30243:

http://trac.webkit.org/changeset/30243
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84785</commentid>
    <comment_count>10</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-30 13:34:29 -0700</bug_when>
    <thetext>(In reply to comment #9) 
&gt; The only suspicion revision is r30243:

Oops. That was a typo. I meant &quot;suspicious&quot; revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84786</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-06-30 13:36:01 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/30243 seems like a likely candidate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84787</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-06-30 13:36:33 -0700</bug_when>
    <thetext>Dammit, people, if all 3 of us are working on this...  I&apos;m just gonna pull out and let you two hash it out  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84790</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-06-30 14:32:33 -0700</bug_when>
    <thetext>I confirmed, as suspected, that 30243 caused this regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84791</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-06-30 14:33:47 -0700</bug_when>
    <thetext>Oh boy, it was a huge patch that fixed about a dozen different fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84792</commentid>
    <comment_count>15</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-06-30 14:55:48 -0700</bug_when>
    <thetext>git-bisect confirms that the regression occurred in r30243.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84812</commentid>
    <comment_count>16</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-30 19:16:34 -0700</bug_when>
    <thetext>I&apos;m assigning this to myself. I&apos;ll take a shot at this tonight, but I probably won&apos;t have time if it drags into tomorrow.

I also apologize for the prior confusion about who was working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84813</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-30 19:29:42 -0700</bug_when>
    <thetext>Sorry my patch broke this. Cameron, I&apos;m glad you&apos;re going to fix this. Let me know if you need anything from me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84819</commentid>
    <comment_count>18</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-30 21:28:10 -0700</bug_when>
    <thetext>Strangely enough, the problem is that &quot;url.ref() == str&quot; is false even though both strings are empty. The comparison is ultimately done in StringHash::equal() in platform/text/StringHash.h, so the bug is likely there.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84822</commentid>
    <comment_count>19</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-30 23:25:31 -0700</bug_when>
    <thetext>The problematic code in StringImpl.h:equal() is

            if (a == b)
                return true;
            if (!a || !b)
                return false;

It is possible for a StringImpl* of an empty string to be non-null, so this code is incorrect. However, if I change it to take the length of a non-null StringImpl*, it passes the check in JSLocation::setHash(), but later on in loading it dies with this backtrace:

#0  0x02b3dc3d in WebCore::StringImpl::length (this=0xffffffff) at text/StringImpl.h:86
#1  0x028dcd3b in WebCore::StringHash::equal (a=0xffffffff, b=0x0) at text/StringHash.h:42
#2  0x02e9f126 in WebCore::equal (a=0xffffffff, b=0x0) at /Users/Cameron/WebKit/WebCore/platform/text/StringImpl.cpp:879
#3  0x028dccdf in WebCore::operator== (a=@0x14d24968, b=@0xbfffe1cc) at text/PlatformString.h:224
#4  0x028f52b5 in WTF::HashTable&lt;WebCore::String, WebCore::String, WTF::IdentityExtractor&lt;WebCore::String&gt;, WebCore::StringHash, WTF::HashTraits&lt;WebCore::String&gt;, WTF::HashTraits&lt;WebCore::String&gt; &gt;::isEmptyBucket (value=@0x14d24968) at HashTable.h:327

I guess 0xffffffff is an empty or deleted value in the hash table. Should it be getting used here? What is the best way to fix this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84823</commentid>
    <comment_count>20</comment_count>
      <attachid>22017</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-06-30 23:26:43 -0700</bug_when>
    <thetext>Created attachment 22017
Patch that should work

Here is the patch that should work, but fails due to the problem mentioned in the previous post.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84826</commentid>
    <comment_count>21</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-06-30 23:58:32 -0700</bug_when>
    <thetext>It is a (correct) feature that the null string and the empty string do not compare equal. Either KURL::ref needs to change to return an empty string instead of a null string in the !hasRef() case, for the sake of compatibility with substring operations, which return the empty string when no such substring exists, or clients performing substring operations need to account for null vs empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84830</commentid>
    <comment_count>22</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-07-01 00:57:26 -0700</bug_when>
    <thetext>Geoff straightened me out on IRC. I guess I thought WebCore&apos;s Strings should work like UString. The problem is that KURL::ref() possibly returns a null string. The natural thing to do is to make it return the empty string, but we should check its callsites first. It has 7 callsites in WebCore:

void JSLocation::setHash(ExecState* exec, JSValue* value)
{
    ...
    if (url.ref() == str)
        return;
    ...
}

We want url.ref() here to be the empty string, not the null string, as that fixes the bug.

String KURL::prettyURL() const
{
    ...
    if (m_fragmentEnd != m_queryEnd) {
        result.append(&apos;#&apos;);
        append(result, ref());
    }
    ...
}

Clearly, null and empty are the same here.

String HTMLAnchorElement::hash() const
{
    return &quot;#&quot; + href().ref();
}

It doesn&apos;t matter here, because the result is immediately being concatenated with another string.

String Location::hash() const
{
    if (!m_frame)
        return String();

    const KURL&amp; url = this-&gt;url();
    return url.ref().isNull() ? &quot;&quot; : &quot;#&quot; + url.ref();
}

We can simply change the isNull() here to an isEmpty(), and the result of the second call is immediately concatenated. Not changing it causes the following tests to fail, so there is already test coverage here:

fast/dom/location-hash.html
http/tests/security/local-user-CSS-from-remote.html
http/tests/security/xss-DENIED-assign-location-hash.html

AccessibilityObject* AccessibilityRenderObject::internalLinkElement() const
{
    HTMLAnchorElement* anchor = anchorElement();
    if (!anchor)
        return 0;
    
    KURL linkURL = anchor-&gt;href();
    String ref = linkURL.ref();
    if (ref.isEmpty())
        return 0;
    
    // check if URL is the same as current URL
    linkURL.setRef(&quot;&quot;);
    ...
}

It doesn&apos;t matter here, because String::isEmpty() is the same for null and empty strings.

void FrameLoader::gotoAnchor()
{
    // If our URL has no ref, then we have no place we need to jump to.
    // OTOH If CSS target was set previously, we want to set it to 0, recalc
    // and possibly repaint because :target pseudo class may have been
    // set (see bug 11321).
    if (!m_URL.hasRef() &amp;&amp; !(m_frame-&gt;document() &amp;&amp; m_frame-&gt;document()-&gt;getCSSTarget()))
        return;

    String ref = m_URL.ref();
    if (gotoAnchor(ref))
        return;

    // Try again after decoding the ref, based on the document&apos;s encoding.
    if (m_decoder)
        gotoAnchor(decodeURLEscapeSequences(ref, m_decoder-&gt;encoding()));
}

Calling gotoAnchor() with an empty ref (as opposed to a null ref) seems to be fine, as the test fast/css/target-fragment-match.html for bug 11321 still passes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84833</commentid>
    <comment_count>23</comment_count>
      <attachid>22018</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-07-01 01:44:16 -0700</bug_when>
    <thetext>Created attachment 22018
Proposed patch

Here is a patch that fixes the problem. My attempts to make a layout test have all failed, but I will keep on trying. If anyone has an idea about how to get DRT to keep on going with the scheduled location changes, please let me know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84838</commentid>
    <comment_count>24</comment_count>
      <attachid>22020</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-07-01 03:00:26 -0700</bug_when>
    <thetext>Created attachment 22020
Proposed patch with test

I found the http/tests/loading/ directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84840</commentid>
    <comment_count>25</comment_count>
      <attachid>22021</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-07-01 03:06:20 -0700</bug_when>
    <thetext>Created attachment 22021
Proposed patch with test

I forgot to include a description of the test in the test output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84867</commentid>
    <comment_count>26</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-07-01 07:15:42 -0700</bug_when>
    <thetext>Great analysis, Cameron!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84871</commentid>
    <comment_count>27</comment_count>
      <attachid>22021</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-07-01 07:41:42 -0700</bug_when>
    <thetext>Comment on attachment 22021
Proposed patch with test

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84877</commentid>
    <comment_count>28</comment_count>
      <attachid>22021</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-07-01 08:06:11 -0700</bug_when>
    <thetext>Comment on attachment 22021
Proposed patch with test

I think that a better explanation of expected results in the test would be beneficial. It would be very hard to figure out which order of callbacks is right otherwise, and might even make someone land incorrect results on top of correct ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84878</commentid>
    <comment_count>29</comment_count>
      <attachid>22021</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-07-01 08:11:53 -0700</bug_when>
    <thetext>Comment on attachment 22021
Proposed patch with test

Changed my mind - Alexey raises a good point.  Additionally, tests that rely on DRT&apos;s load delegate output would do well to point out that the test was designed for DRT and might not be effective in the browser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84879</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-07-01 08:18:28 -0700</bug_when>
    <thetext>There&apos;s a logical that ref() returns null instead of empty when there is no ref. It allows the caller to distinguish the case of an empty ref &quot;&lt;url&gt;#&quot; from no ref at all &quot;&lt;url&gt;&quot;. That seems like a good design to me. Does it need to change? Can we change the callers instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84893</commentid>
    <comment_count>31</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-07-01 11:15:45 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; There&apos;s a logical that ref() returns null instead of empty when there is no
&gt; ref. It allows the caller to distinguish the case of an empty ref &quot;&lt;url&gt;#&quot; from
&gt; no ref at all &quot;&lt;url&gt;&quot;. That seems like a good design to me. Does it need to
&gt; change? Can we change the callers instead?

I agree with your point. It doesn&apos;t seem like it would ever a problem, because anyone that wants to know whether there is a fragment checks url.hasRef() instead of url.ref().isNull(), but Brady pointed out to me that conversions into platform-specific URL classes could mean that bugs get introduced elsewhere. I&apos;ll change the one caller to account for the case where they are both empty.

I will also include a more detailed description of failure in the layout test, as well as pointing out that if it fails in the browser it will simply reload forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84898</commentid>
    <comment_count>32</comment_count>
      <attachid>22031</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-07-01 11:49:04 -0700</bug_when>
    <thetext>Created attachment 22031
Revised proposed patch

Here is a new patch incorporating the comments posted in this bug.

Here is the output when the test fails:

main frame - didStartProvisionalLoadForFrame
main frame - didCommitLoadForFrame
main frame - willPerformClientRedirectToURL: http://127.0.0.1:8000/loading/location-hash-reload-cycle.html 
main frame - didCancelClientRedirectForFrame
main frame - willPerformClientRedirectToURL: http://127.0.0.1:8000/loading/location-hash-reload-cycle.html 
main frame - didHandleOnloadEventsForFrame
main frame - willPerformClientRedirectToURL: http://127.0.0.1:8000/loading/location-hash-reload-cycle.html 
main frame - didFinishDocumentLoadForFrame
main frame - didFinishLoadForFrame
This test checks that no loader actions occur when setting window.location.hash to the empty string or &quot;#&quot;. If this test fails when run in a browser, it will reload continuously. If this test fails when run in DumpRenderTree, the FrameLoader callback output will contain willPerformClientRedirectToURL callbacks.

Both of the window.location.hashes change the output independently of each other. When run in a browser, it is very noticeable that it is reloading forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84901</commentid>
    <comment_count>33</comment_count>
      <attachid>22031</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-07-01 11:59:02 -0700</bug_when>
    <thetext>Comment on attachment 22031
Revised proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84902</commentid>
    <comment_count>34</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-07-01 12:06:41 -0700</bug_when>
    <thetext>Landed in r34927.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84910</commentid>
    <comment_count>35</comment_count>
      <attachid>22031</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-07-01 15:06:51 -0700</bug_when>
    <thetext>Comment on attachment 22031
Revised proposed patch

Cameron, I know you meant this:

    if (oldRef == str || (oldRef.isNull() &amp;&amp; str.isEmpty()))

You forgot to use oldRef in the old part of the expression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84911</commentid>
    <comment_count>36</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-07-01 15:09:25 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 22031 [edit])
&gt; Cameron, I know you meant this:
&gt; 
&gt;     if (oldRef == str || (oldRef.isNull() &amp;&amp; str.isEmpty()))
&gt; 
&gt; You forgot to use oldRef in the old part of the expression.

How did Brady and I miss that? r=you to fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84919</commentid>
    <comment_count>37</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-07-01 16:05:08 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; How did Brady and I miss that? r=you to fix it?

As you probably already noticed, I fixed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86406</commentid>
    <comment_count>38</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-07-18 22:48:25 -0700</bug_when>
    <thetext>*** Bug 17832 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22004</attachid>
            <date>2008-06-29 23:40:12 -0700</date>
            <delta_ts>2008-06-29 23:40:12 -0700</delta_ts>
            <desc>Reduction</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>391</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIgogICAgICAg
ICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+CjxodG1sPgo8aGVh
ZD4KICAgICAgICA8dGl0bGU+VGVzdDwvdGl0bGU+CiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiPgogICAgICAgIHdpbmRvdy5tYWluID0gZnVuY3Rpb24oKXsKICAgICAgICAg
ICAgICAgIGxvY2F0aW9uLmhhc2ggPSAiIyI7CiAgICAgICAgfQogICAgICAgIDwvc2NyaXB0Pgo8
L2hlYWQ+Cjxib2R5IG9ubG9hZD0ibWFpbigpOyI+CiAgICAgICAgPGgxPlRlc3Q8L2gxPgogICAg
ICAgIDxwPlRlc3RpbmcgbG9jYXRpb24uaGFzaDwvcD4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22017</attachid>
            <date>2008-06-30 23:26:43 -0700</date>
            <delta_ts>2008-07-01 01:44:16 -0700</delta_ts>
            <desc>Patch that should work</desc>
            <filename>StringHash.diff</filename>
            <type>text/plain</type>
            <size>885</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL3RleHQvU3RyaW5nSGFzaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L3RleHQvU3RyaW5nSGFzaC5oCShyZXZpc2lvbiAzNDkwMikKKysrIHBsYXRmb3JtL3RleHQvU3Ry
aW5nSGFzaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYSA9PSBiKQogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgdW5zaWduZWQgYUxlbmd0aCA9IGEtPmxl
bmd0aCgpOwotICAgICAgICAgICAgdW5zaWduZWQgYkxlbmd0aCA9IGItPmxlbmd0aCgpOworICAg
ICAgICAgICAgdW5zaWduZWQgYUxlbmd0aCA9IGEgPyBhLT5sZW5ndGgoKSA6IDA7CisgICAgICAg
ICAgICB1bnNpZ25lZCBiTGVuZ3RoID0gYiA/IGItPmxlbmd0aCgpIDogMDsKICAgICAgICAgICAg
IGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgaWYgKGFMZW5ndGggPT0gMCAmJiBiTGVuZ3RoID09IDApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBhQ2hhcnMg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYS0+Y2hhcmFjdGVycygpKTsKICAg
ICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBiQ2hhcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oYi0+Y2hhcmFjdGVycygpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22018</attachid>
            <date>2008-07-01 01:44:16 -0700</date>
            <delta_ts>2008-07-01 03:00:26 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>kurl.diff</filename>
            <type>text/plain</type>
            <size>1607</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM0OTA5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDgtMDct
MDEgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDE5ODIyOiBSRUdSRVNT
SU9OIChyMzAyNDMpOiBzZXR0aW5nIGxvY2F0aW9uLmhhc2ggdG8gIiMiIGNhdXNlcyBhIHJlbG9h
ZAorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODIy
PgorCisgICAgICAgIENoYW5nZSBLVVJMOjpyZWYoKSBzbyBpdCByZXR1cm5zIGFuIGVtcHR5IHN0
cmluZyBpbnN0ZWFkIG9mIGEgbnVsbAorICAgICAgICBzdHJpbmcgd2hlbiB0aGVyZSBpcyBubyBm
cmFnbWVudC4KKworICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYXRpb246Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6S1VSTDo6cmVmKToKKwogMjAwOC0wNy0wMSAgU2ltb24gSGF1c21hbm4gIDxo
YXVzbWFubkB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZpeCwgaW5jbHVkZSBEYXRlSW5z
dGFuY2UuaC4KSW5kZXg6IHBhZ2UvTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvTG9j
YXRpb24uY3BwCShyZXZpc2lvbiAzNDkwMikKKysrIHBhZ2UvTG9jYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgU3RyaW5nIExvY2F0aW9uOjpoYXNoKCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgY29uc3QgS1VSTCYgdXJsID0gdGhpcy0+
dXJsKCk7Ci0gICAgcmV0dXJuIHVybC5yZWYoKS5pc051bGwoKSA/ICIiIDogIiMiICsgdXJsLnJl
ZigpOworICAgIHJldHVybiB1cmwucmVmKCkuaXNFbXB0eSgpID8gIiIgOiAiIyIgKyB1cmwucmVm
KCk7CiB9CiAKIFN0cmluZyBMb2NhdGlvbjo6dG9TdHJpbmcoKSBjb25zdApJbmRleDogcGxhdGZv
cm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDM0
OTAyKQorKysgcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw3ICs1NzIs
NyBAQCBTdHJpbmcgS1VSTDo6dXNlcigpIGNvbnN0CiBTdHJpbmcgS1VSTDo6cmVmKCkgY29uc3QK
IHsKICAgICBpZiAobV9mcmFnbWVudEVuZCA9PSBtX3F1ZXJ5RW5kKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOwogCiAgICAgcmV0dXJuIG1fc3Ry
aW5nLnN1YnN0cmluZyhtX3F1ZXJ5RW5kICsgMSwgbV9mcmFnbWVudEVuZCAtIChtX3F1ZXJ5RW5k
ICsgMSkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22020</attachid>
            <date>2008-07-01 03:00:26 -0700</date>
            <delta_ts>2008-07-01 03:06:20 -0700</delta_ts>
            <desc>Proposed patch with test</desc>
            <filename>kurl.diff</filename>
            <type>text/plain</type>
            <size>3502</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDkwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDctMDEgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1
d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDE5ODIyOiBSRUdSRVNTSU9OIChyMzAyNDMpOiBzZXR0aW5nIGxvY2F0aW9uLmhh
c2ggdG8gIiMiIGNhdXNlcyBhIHJlbG9hZAorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODIyPgorCisgICAgICAgIENoYW5nZSBLVVJMOjpyZWYoKSBz
byBpdCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mIGEgbnVsbAorICAgICAgICBz
dHJpbmcgd2hlbiB0aGVyZSBpcyBubyBmcmFnbWVudC4KKworICAgICAgICAqIHBhZ2UvTG9jYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246Omhhc2gpOgorICAgICAgICAqIHBs
YXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cmVmKToKKwogMjAwOC0w
Ny0wMSAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1
aWxkIGZpeCwgaW5jbHVkZSBEYXRlSW5zdGFuY2UuaC4KSW5kZXg6IFdlYkNvcmUvcGFnZS9Mb2Nh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAkocmV2aXNp
b24gMzQ5MDIpCisrKyBXZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAsNyArMTIwLDcgQEAgU3RyaW5nIExvY2F0aW9uOjpoYXNoKCkgY29uc3QKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCiAgICAgY29uc3QgS1VSTCYgdXJsID0gdGhpcy0+dXJsKCk7Ci0g
ICAgcmV0dXJuIHVybC5yZWYoKS5pc051bGwoKSA/ICIiIDogIiMiICsgdXJsLnJlZigpOworICAg
IHJldHVybiB1cmwucmVmKCkuaXNFbXB0eSgpID8gIiIgOiAiIyIgKyB1cmwucmVmKCk7CiB9CiAK
IFN0cmluZyBMb2NhdGlvbjo6dG9TdHJpbmcoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCShyZXZp
c2lvbiAzNDkwMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3Miw3ICs1NzIsNyBAQCBTdHJpbmcgS1VSTDo6dXNlcigpIGNvbnN0CiBTdHJpbmcgS1VS
TDo6cmVmKCkgY29uc3QKIHsKICAgICBpZiAobV9mcmFnbWVudEVuZCA9PSBtX3F1ZXJ5RW5kKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOwogCiAg
ICAgcmV0dXJuIG1fc3RyaW5nLnN1YnN0cmluZyhtX3F1ZXJ5RW5kICsgMSwgbV9mcmFnbWVudEVu
ZCAtIChtX3F1ZXJ5RW5kICsgMSkpOwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzQ5MTEpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAw
OC0wNy0wMSAgQ2FtZXJvbiBad2FyaWNoICA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBmb3I6CisK
KyAgICAgICAgQnVnIDE5ODIyOiBSRUdSRVNTSU9OIChyMzAyNDMpOiBzZXR0aW5nIGxvY2F0aW9u
Lmhhc2ggdG8gIiMiIGNhdXNlcyBhIHJlbG9hZAorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODIyPgorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2Fk
aW5nL2xvY2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL2xvY2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLmh0bWw6
IEFkZGVkLgorCiAyMDA4LTA2LTMwICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvYWRpbmcvbG9jYXRpb24taGFzaC1yZWxvYWQtY3ljbGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9sb2NhdGlvbi1oYXNoLXJl
bG9hZC1jeWNsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvYWRpbmcvbG9jYXRpb24taGFzaC1yZWxvYWQtY3ljbGUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWlu
IGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRG
aW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRGb3JG
cmFtZQorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvbG9jYXRpb24taGFz
aC1yZWxvYWQtY3ljbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvYWRpbmcvbG9jYXRpb24taGFzaC1yZWxvYWQtY3ljbGUuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9sb2NhdGlvbi1oYXNoLXJlbG9hZC1jeWNs
ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdD4KK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgCisgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAiIjsKKyAgICB3aW5kb3cubG9jYXRpb24u
aGFzaCA9ICIjIjsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0
cygpOyI+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22021</attachid>
            <date>2008-07-01 03:06:20 -0700</date>
            <delta_ts>2008-07-01 11:49:04 -0700</delta_ts>
            <desc>Proposed patch with test</desc>
            <filename>kurl.diff</filename>
            <type>text/plain</type>
            <size>3725</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDkwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDctMDEgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1
d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDE5ODIyOiBSRUdSRVNTSU9OIChyMzAyNDMpOiBzZXR0aW5nIGxvY2F0aW9uLmhh
c2ggdG8gIiMiIGNhdXNlcyBhIHJlbG9hZAorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODIyPgorCisgICAgICAgIENoYW5nZSBLVVJMOjpyZWYoKSBz
byBpdCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mIGEgbnVsbAorICAgICAgICBz
dHJpbmcgd2hlbiB0aGVyZSBpcyBubyBmcmFnbWVudC4KKworICAgICAgICAqIHBhZ2UvTG9jYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246Omhhc2gpOgorICAgICAgICAqIHBs
YXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cmVmKToKKwogMjAwOC0w
Ny0wMSAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1
aWxkIGZpeCwgaW5jbHVkZSBEYXRlSW5zdGFuY2UuaC4KSW5kZXg6IFdlYkNvcmUvcGFnZS9Mb2Nh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAkocmV2aXNp
b24gMzQ5MDIpCisrKyBXZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAsNyArMTIwLDcgQEAgU3RyaW5nIExvY2F0aW9uOjpoYXNoKCkgY29uc3QKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCiAgICAgY29uc3QgS1VSTCYgdXJsID0gdGhpcy0+dXJsKCk7Ci0g
ICAgcmV0dXJuIHVybC5yZWYoKS5pc051bGwoKSA/ICIiIDogIiMiICsgdXJsLnJlZigpOworICAg
IHJldHVybiB1cmwucmVmKCkuaXNFbXB0eSgpID8gIiIgOiAiIyIgKyB1cmwucmVmKCk7CiB9CiAK
IFN0cmluZyBMb2NhdGlvbjo6dG9TdHJpbmcoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCShyZXZp
c2lvbiAzNDkwMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3Miw3ICs1NzIsNyBAQCBTdHJpbmcgS1VSTDo6dXNlcigpIGNvbnN0CiBTdHJpbmcgS1VS
TDo6cmVmKCkgY29uc3QKIHsKICAgICBpZiAobV9mcmFnbWVudEVuZCA9PSBtX3F1ZXJ5RW5kKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOwogCiAg
ICAgcmV0dXJuIG1fc3RyaW5nLnN1YnN0cmluZyhtX3F1ZXJ5RW5kICsgMSwgbV9mcmFnbWVudEVu
ZCAtIChtX3F1ZXJ5RW5kICsgMSkpOwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzQ5MTEpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAw
OC0wNy0wMSAgQ2FtZXJvbiBad2FyaWNoICA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBmb3I6CisK
KyAgICAgICAgQnVnIDE5ODIyOiBSRUdSRVNTSU9OIChyMzAyNDMpOiBzZXR0aW5nIGxvY2F0aW9u
Lmhhc2ggdG8gIiMiIGNhdXNlcyBhIHJlbG9hZAorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODIyPgorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2Fk
aW5nL2xvY2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL2xvY2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLmh0bWw6
IEFkZGVkLgorCiAyMDA4LTA2LTMwICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvYWRpbmcvbG9jYXRpb24taGFzaC1yZWxvYWQtY3ljbGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9sb2NhdGlvbi1oYXNoLXJl
bG9hZC1jeWNsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvYWRpbmcvbG9jYXRpb24taGFzaC1yZWxvYWQtY3ljbGUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWlu
IGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRG
aW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRGb3JG
cmFtZQorVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IG5vIGxvYWRlciBhY3Rpb25zIG9jY3VyIHdoZW4g
c2V0dGluZyB3aW5kb3cubG9jYXRpb24uaGFzaCB0byB0aGUgZW1wdHkgc3RyaW5nIG9yICIjIi4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9sb2NhdGlvbi1oYXNoLXJlbG9h
ZC1jeWNsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGlu
Zy9sb2NhdGlvbi1oYXNoLXJlbG9hZC1jeWNsZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL2xvY2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0Pgor
ZnVuY3Rpb24gcnVuVGVzdHMoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAKKyAg
ICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICIiOworICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0g
IiMiOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4K
KzxwPlRoaXMgdGVzdCBjaGVja3MgdGhhdCBubyBsb2FkZXIgYWN0aW9ucyBvY2N1ciB3aGVuIHNl
dHRpbmcgd2luZG93LmxvY2F0aW9uLmhhc2ggdG8gdGhlIGVtcHR5IHN0cmluZyBvciAiIyIuPC9w
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="9688"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22031</attachid>
            <date>2008-07-01 11:49:04 -0700</date>
            <delta_ts>2008-07-01 11:59:02 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>hash.diff</filename>
            <type>text/plain</type>
            <size>3947</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDkyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDgtMDctMDEgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1
d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDE5ODIyOiBSRUdSRVNTSU9OIChyMzAyNDMpOiBzZXR0aW5nIGxvY2F0aW9uLmhh
c2ggdG8gIiMiIGNhdXNlcyBhIHJlbG9hZAorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODIyPgorCisgICAgICAgIENoYW5nZSBKU0xvY2F0aW9uOjpz
ZXRIYXNoKCkgdG8gbm90IHNjaGVkdWxlIG5hdmlnYXRpb24gaW4gdGhlIGNhc2UKKyAgICAgICAg
d2hlcmUgdGhlIG9sZCBmcmFnbWVudCBpcyB0aGUgbnVsbCBTdHJpbmcgYW5kIHRoZSBuZXcgZnJh
Z21lbnQgaXMgYW4KKyAgICAgICAgZW1wdHkgU3RyaW5nLgorCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpz
ZXRIYXNoKToKKwogMjAwOC0wNy0wMSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUm9sbCBvdXQgcjM0OTEzLCBhcyBpdCBicm9rZSB0aGUgV2luZG93cyBidWlsZCBk
dWUgdG8gYmFkIGNhc3RpbmcKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMzQ5MjUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsMTAgKzIxMywxMSBAQCB2b2lkIEpT
TG9jYXRpb246OnNldEhhc2goRXhlY1N0YXRlKiBleGVjCiAgICAgQVNTRVJUKGZyYW1lKTsKIAog
ICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKKyAgICBTdHJpbmcgb2xkUmVm
ID0gdXJsLnJlZigpOwogICAgIFN0cmluZyBzdHIgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CiAg
ICAgaWYgKHN0ci5zdGFydHNXaXRoKCIjIikpCiAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmco
MSk7Ci0gICAgaWYgKHVybC5yZWYoKSA9PSBzdHIpCisgICAgaWYgKHVybC5yZWYoKSA9PSBzdHIg
fHwgKG9sZFJlZi5pc051bGwoKSAmJiBzdHIuaXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHVybC5zZXRSZWYoc3RyKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzQ5MjYpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOC0w
Ny0wMSAgQ2FtZXJvbiBad2FyaWNoICA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBmb3I6CisKKyAg
ICAgICAgQnVnIDE5ODIyOiBSRUdSRVNTSU9OIChyMzAyNDMpOiBzZXR0aW5nIGxvY2F0aW9uLmhh
c2ggdG8gIiMiIGNhdXNlcyBhIHJlbG9hZAorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODIyPgorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5n
L2xvY2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9sb2FkaW5nL2xvY2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLmh0bWw6IEFk
ZGVkLgorCiAyMDA4LTA3LTAxICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSb2xsIG91dCByMzQ5MTMsIGFzIGl0IGJyb2tlIHRoZSBXaW5kb3dzIGJ1aWxkIGR1ZSB0
byBiYWQgY2FzdGluZwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL2xvY2F0
aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvbG9jYXRpb24taGFzaC1yZWxvYWQtY3ljbGUtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL2xv
Y2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQor
bWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRs
ZU9ubG9hZEV2ZW50c0ZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2Fk
Rm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1RoaXMgdGVzdCBj
aGVja3MgdGhhdCBubyBsb2FkZXIgYWN0aW9ucyBvY2N1ciB3aGVuIHNldHRpbmcgd2luZG93Lmxv
Y2F0aW9uLmhhc2ggdG8gdGhlIGVtcHR5IHN0cmluZyBvciAiIyIuIElmIHRoaXMgdGVzdCBmYWls
cyB3aGVuIHJ1biBpbiBhIGJyb3dzZXIsIGl0IHdpbGwgcmVsb2FkIGNvbnRpbnVvdXNseS4gSWYg
dGhpcyB0ZXN0IGZhaWxzIHdoZW4gcnVuIGluIER1bXBSZW5kZXJUcmVlLCB0aGUgRnJhbWVMb2Fk
ZXIgY2FsbGJhY2sgb3V0cHV0IHdpbGwgY29udGFpbiB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0
VG9VUkwgY2FsbGJhY2tzLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL2xv
Y2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL2xvY2F0aW9uLWhhc2gtcmVsb2FkLWN5Y2xlLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvbG9jYXRpb24taGFzaC1y
ZWxvYWQtY3ljbGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICAgIAorICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gIiI7CisgICAgd2luZG93
LmxvY2F0aW9uLmhhc2ggPSAiIyI7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0icnVuVGVzdHMoKTsiPgorPHA+VGhpcyB0ZXN0IGNoZWNrcyB0aGF0IG5vIGxvYWRlciBhY3Rp
b25zIG9jY3VyIHdoZW4gc2V0dGluZyB3aW5kb3cubG9jYXRpb24uaGFzaCB0byB0aGUgZW1wdHkg
c3RyaW5nIG9yICIjIi4gSWYgdGhpcyB0ZXN0IGZhaWxzIHdoZW4gcnVuIGluIGEgYnJvd3Nlciwg
aXQgd2lsbCByZWxvYWQgY29udGludW91c2x5LiBJZiB0aGlzIHRlc3QgZmFpbHMgd2hlbiBydW4g
aW4gRHVtcFJlbmRlclRyZWUsIHRoZSBGcmFtZUxvYWRlciBjYWxsYmFjayBvdXRwdXQgd2lsbCBj
b250YWluIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTCBjYWxsYmFja3MuPC9wPgorPC9i
b2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="9696"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>