<?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>33213</bug_id>
          
          <creation_ts>2010-01-05 10:18:50 -0800</creation_ts>
          <short_desc>Make png image decoder work with segmented SharedBuffer</short_desc>
          <delta_ts>2010-01-06 10:57:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>177213</commentid>
    <comment_count>0</comment_count>
      <attachid>45903</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 10:18:50 -0800</bug_when>
    <thetext>Created attachment 45903
the patch

See bug 33178</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177214</commentid>
    <comment_count>1</comment_count>
      <attachid>45903</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 10:19:39 -0800</bug_when>
    <thetext>Comment on attachment 45903
the patch

oops. forgot to fix a bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177241</commentid>
    <comment_count>2</comment_count>
      <attachid>45911</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 10:55:53 -0800</bug_when>
    <thetext>Created attachment 45911
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177243</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-05 10:59:25 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45911 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177286</commentid>
    <comment_count>4</comment_count>
      <attachid>45911</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-05 12:08:26 -0800</bug_when>
    <thetext>Comment on attachment 45911
the patch

&gt; +    const char* contents;
&gt; +    unsigned length = data.getSomeData(contents, 0);
&gt; +
&gt;      // We need at least 4 bytes to figure out what kind of image we&apos;re dealing with.
&gt; -    int length = data.size();
&gt;      if (length &lt; 4)
&gt;          return 0;

This seems a bit subtle and non-obvious. I guess the class guarantees that the first four bytes will all be in a single segment even if they come in one byte at a time, but nothing in the SharedBuffer header comments makes that clear.

&gt; +        virtual void setData(SharedBuffer* data, bool allDataReceived)
&gt; +        {
&gt; +            m_data = data;
&gt; +            m_isAllDataReceived = allDataReceived;
&gt; +        }

It&apos;s not optimal style to have a virtual function defined in a header. The old code had that, but it would be better not to do it that way.

&gt; +        , m_jobComplete(false)

For booleans data members and function members it&apos;s best to name them so they work in a sentence &quot;image decoder &lt;xxx&gt;&quot;. So hasAlpha is a pretty good name but jobComplete is not as good. Maybe hasFinishedDecoding or hasReceivedAllData?

&gt; +            if (!segmentLength) {
&gt; +                if (!m_jobComplete) {
&gt; +                    if (decoder-&gt;isAllDataReceived())
&gt; +                        decoder-&gt;pngComplete();
&gt; +                }
&gt; +                break;
&gt; +            }

I suggest putting the other code outside the loop. It seems we should just break when done and then finish the ob after the loop.

I&apos;ll say r=me even though I normally don&apos;t review code in this file. Seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177293</commentid>
    <comment_count>5</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 12:17:37 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 45911 [details])
&gt; &gt; +    const char* contents;
&gt; &gt; +    unsigned length = data.getSomeData(contents, 0);
&gt; &gt; +
&gt; &gt;      // We need at least 4 bytes to figure out what kind of image we&apos;re dealing with.
&gt; &gt; -    int length = data.size();
&gt; &gt;      if (length &lt; 4)
&gt; &gt;          return 0;
&gt; 
&gt; This seems a bit subtle and non-obvious. I guess the class guarantees that the
&gt; first four bytes will all be in a single segment even if they come in one byte
&gt; at a time, but nothing in the SharedBuffer header comments makes that clear.
&gt; 

You&apos;re right. To make it safe, I&apos;ll rewrite this code for the corner case, so that we won&apos;t have a hard-to-debug problem if the assumption becomes false in the future.

&gt; &gt; +        virtual void setData(SharedBuffer* data, bool allDataReceived)
&gt; &gt; +        {
&gt; &gt; +            m_data = data;
&gt; &gt; +            m_isAllDataReceived = allDataReceived;
&gt; &gt; +        }
&gt; 
&gt; It&apos;s not optimal style to have a virtual function defined in a header. The old
&gt; code had that, but it would be better not to do it that way.

Not sure if any derived class has implemented different setData(). If not, I&apos;ll remove &quot;virtual&quot;
&gt; 
&gt; &gt; +        , m_jobComplete(false)
&gt; 
&gt; For booleans data members and function members it&apos;s best to name them so they
&gt; work in a sentence &quot;image decoder &lt;xxx&gt;&quot;. So hasAlpha is a pretty good name but
&gt; jobComplete is not as good. Maybe hasFinishedDecoding or hasReceivedAllData?

will use hasFinishedDecoding

&gt; 
&gt; &gt; +            if (!segmentLength) {
&gt; &gt; +                if (!m_jobComplete) {
&gt; &gt; +                    if (decoder-&gt;isAllDataReceived())
&gt; &gt; +                        decoder-&gt;pngComplete();
&gt; &gt; +                }
&gt; &gt; +                break;
&gt; &gt; +            }
&gt; 
&gt; I suggest putting the other code outside the loop. It seems we should just
&gt; break when done and then finish the ob after the loop.

Agree, and actually the 2 &quot;if&quot; can be merged.

&gt; 
&gt; I&apos;ll say r=me even though I normally don&apos;t review code in this file. Seems
&gt; fine.

thanks a lot. but I&apos;ll post a new patch regarding to above issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177348</commentid>
    <comment_count>6</comment_count>
      <attachid>45927</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 13:22:21 -0800</bug_when>
    <thetext>Created attachment 45927
fixed some issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177356</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-05 13:28:51 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45927 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177380</commentid>
    <comment_count>8</comment_count>
      <attachid>45927</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-05 14:03:18 -0800</bug_when>
    <thetext>Comment on attachment 45927
fixed some issues

&gt; +    // XBMs require 8 bytes of info.
&gt; +    static const unsigned maxMarkerLength = 8;
&gt; +
&gt; +    char contents[maxMarkerLength];
&gt; +    unsigned length = 0;
&gt; +    for (;;) {
&gt; +        const char* moreContents;
&gt; +        unsigned moreContentsLength = data.getSomeData(moreContents, 0);
&gt; +        if (!moreContentsLength)
&gt; +            break;
&gt; +        unsigned bytesToCopy = min(maxMarkerLength - length, moreContentsLength);
&gt; +        memcpy(contents + length, moreContents, bytesToCopy);
&gt; +        length += bytesToCopy;
&gt; +        if (length == maxMarkerLength)
&gt; +            break;
&gt; +    }

This cries out for a helper function. SharedBuffer could provide a function to that has this logic in it rather than requiring callers to repeatedly call getSomeData. Or at least put this in a separate function in this file.

Seems OK. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177418</commentid>
    <comment_count>9</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 14:57:04 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 45927 [details])
&gt; &gt; +    // XBMs require 8 bytes of info.
&gt; &gt; +    static const unsigned maxMarkerLength = 8;
&gt; &gt; +
&gt; &gt; +    char contents[maxMarkerLength];
&gt; &gt; +    unsigned length = 0;
&gt; &gt; +    for (;;) {
&gt; &gt; +        const char* moreContents;
&gt; &gt; +        unsigned moreContentsLength = data.getSomeData(moreContents, 0);
&gt; &gt; +        if (!moreContentsLength)
&gt; &gt; +            break;
&gt; &gt; +        unsigned bytesToCopy = min(maxMarkerLength - length, moreContentsLength);
&gt; &gt; +        memcpy(contents + length, moreContents, bytesToCopy);
&gt; &gt; +        length += bytesToCopy;
&gt; &gt; +        if (length == maxMarkerLength)
&gt; &gt; +            break;
&gt; &gt; +    }
&gt; 
&gt; This cries out for a helper function. SharedBuffer could provide a function to
&gt; that has this logic in it rather than requiring callers to repeatedly call
&gt; getSomeData. Or at least put this in a separate function in this file.
&gt; 
&gt; Seems OK. r=me

I&apos;m putting it into a new function with a bug fixed too: getSomeData() should be called with increasing offset but not 0.

Would you like to review the new patch? Or I can commit it now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177431</commentid>
    <comment_count>10</comment_count>
      <attachid>45927</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 15:10:33 -0800</bug_when>
    <thetext>Comment on attachment 45927
fixed some issues

landed @ 52831</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177432</commentid>
    <comment_count>11</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-05 15:10:55 -0800</bug_when>
    <thetext>bug closed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177644</commentid>
    <comment_count>12</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 10:48:27 -0800</bug_when>
    <thetext>Darin, there&apos;s a bug in yesterday&apos;s commit for png decoder:

I move &quot;if (!m_hasFinishedDecoding &amp;&amp; decoder-&gt;isAllDataReceived())&quot; out of the loop, but it hurts another &quot;break&quot;.

        while (unsigned segmentLength = data.getSomeData(segment, m_readOffset)) {
            m_readOffset += segmentLength;
            m_currentBufferSize = m_readOffset;
            png_process_data(m_png, m_info, reinterpret_cast&lt;png_bytep&gt;(const_cast&lt;char*&gt;(segment)), segmentLength);
            if ((sizeOnly &amp;&amp; decoder-&gt;isSizeAvailable()) || m_hasFinishedDecoding)
                break;
        }
        if (!m_hasFinishedDecoding &amp;&amp; decoder-&gt;isAllDataReceived())
            decoder-&gt;pngComplete();

When &quot;sizeonly&quot; is true, decoder-&gt;pngComplete() shouldn&apos;t be called.

Should I post a patch in this bug, or raise a new bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177648</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-06 10:53:12 -0800</bug_when>
    <thetext>Patch in this bug is fine. r=me in advance on adding sizeOnly to the if condition, so you don&apos;t need to post a patch at all if that&apos;s what you do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177651</commentid>
    <comment_count>14</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 10:57:05 -0800</bug_when>
    <thetext>Darin, there&apos;s a bug in yesterday&apos;s commit for png decoder:

I move &quot;if (!m_hasFinishedDecoding &amp;&amp; decoder-&gt;isAllDataReceived())&quot; out of the loop, but it hurts another &quot;break&quot;.

        while (unsigned segmentLength = data.getSomeData(segment, m_readOffset)) {
            m_readOffset += segmentLength;
            m_currentBufferSize = m_readOffset;
            png_process_data(m_png, m_info, reinterpret_cast&lt;png_bytep&gt;(const_cast&lt;char*&gt;(segment)), segmentLength);
            if ((sizeOnly &amp;&amp; decoder-&gt;isSizeAvailable()) || m_hasFinishedDecoding)
                break;
        }
        if (!m_hasFinishedDecoding &amp;&amp; decoder-&gt;isAllDataReceived())
            decoder-&gt;pngComplete();

When &quot;sizeonly&quot; is true, decoder-&gt;pngComplete() shouldn&apos;t be called.

Should I post a patch in this bug, or raise a new bug?(In reply to comment #13)
&gt; Patch in this bug is fine. r=me in advance on adding sizeOnly to the if
&gt; condition, so you don&apos;t need to post a patch at all if that&apos;s what you do.

Peter Kasting already raised a bug for it. bug 33258</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45903</attachid>
            <date>2010-01-05 10:18:50 -0800</date>
            <delta_ts>2010-01-05 10:19:39 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>png_seg.patch</filename>
            <type>text/plain</type>
            <size>7935</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzY5ZmQ2Zi4uNjZkMWY2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyOCBAQAogMjAxMC0wMS0wNSAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNYWtlIFBORyBpbWFnZSBkZWNvZGVyIHdvcmsgd2l0aCBzZWdtZW50ZWQgU2hhcmVkQnVm
ZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0oT09Q
UyEpCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjppc0FsbERhdGFSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OlBOR0ltYWdl
UmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpjbG9zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6Y3VycmVudEJ1ZmZlclNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OnNldENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VE
ZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpwbmdDb21w
bGV0ZSk6CisKKzIwMTAtMDEtMDUgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CisKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KIAogICAgICAgICBGaXggIGJ1aWxkIHdhcm5pbmdzIGJs
aW5kbHkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcAppbmRleCBhMTZiOTQwLi45OWJjMTRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzgsMTMgKzM5LDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFy
ZWRCdWZmZXImIGRhdGEpCiB7CisgICAgY29uc3QgY2hhciogY29udGVudHM7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gZGF0YS5nZXRTb21lRGF0YSgmY29udGVudHMsIDApOworCiAgICAgLy8gV2Ug
bmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdl
J3JlIGRlYWxpbmcgd2l0aC4KLSAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXplKCk7CiAgICAgaWYg
KGxlbmd0aCA8IDQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgdW5zaWduZWQgY2hh
ciogdUNvbnRlbnRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEuZGF0YSgpOwotICAgIGNv
bnN0IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisgICAgY29uc3QgdW5zaWduZWQgY2hh
ciogdUNvbnRlbnRzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY29u
dGVudHMpOwogCiAgICAgLy8gR0lGcyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5KS4KICAgICBpZiAo
c3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAwKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggZGUyNDgyOC4uNDM1NWY2MyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0yMDAsNiArMjAxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJ
bWFnZURlY29kZXIoKQogICAgICAgICAgICAgOiBtX2ZhaWxlZChmYWxzZSkKICAgICAgICAgICAg
ICwgbV9zaXplQXZhaWxhYmxlKGZhbHNlKQorICAgICAgICAgICAgLCBtX2lzQWxsRGF0YVJlY2Vp
dmVkKGZhbHNlKQogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAg
ICAgICAgICAsIG1fbWF4TnVtUGl4ZWxzKC0xKQogICAgICAgICAgICAgLCBtX3NjYWxlZChmYWxz
ZSkKQEAgLTIxOCw3ICsyMjAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0ID0gMDsKIAogICAgICAgICAvLyBB
bGwgc3BlY2lmaWMgZGVjb2RlciBwbHVnaW5zIG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhlIGRh
dGEgdGhleSBhcmUgZ2l2ZW4uCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1
ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIHsgbV9kYXRhID0gZGF0YTsgfQorICAg
ICAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbERhdGFS
ZWNlaXZlZDsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtX2RhdGEg
PSBkYXRhOworICAgICAgICAgICAgbV9pc0FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZl
ZDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9y
bWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LiBUaGlzIGRlZmF1bHQKICAgICAgICAgLy8gaW1w
bGVtZW50YXRpb24ganVzdCByZXR1cm5zIHRydWUgaWYgdGhlIHNpemUgaGFzIGJlZW4gc2V0IGFu
ZCB3ZSBoYXZlIG5vdApAQCAtMzI2LDYgKzMzMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGU7Cisg
ICAgICAgIGJvb2wgbV9pc0FsbERhdGFSZWNlaXZlZDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAyZWEwMTJiLi5lNzg2ZDhjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMp
IDIwMDEgbW96aWxsYS5vcmcKICAqCkBAIC03NSw2ICs3Niw4IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2RlY29kaW5nU2l6ZU9ubHkoZmFsc2UpCiAgICAgICAgICwgbV9pbnRlcmxhY2VCdWZmZXIo
MCkKICAgICAgICAgLCBtX2hhc0FscGhhKDApCisgICAgICAgICwgbV9qb2JDb21wbGV0ZShmYWxz
ZSkKKyAgICAgICAgLCBtX2N1cnJlbnRCdWZmZXJTaXplKDApCiAgICAgewogICAgICAgICBtX3Bu
ZyA9IHBuZ19jcmVhdGVfcmVhZF9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLCAwLCBkZWNv
ZGluZ0ZhaWxlZCwgZGVjb2RpbmdXYXJuaW5nKTsKICAgICAgICAgbV9pbmZvID0gcG5nX2NyZWF0
ZV9pbmZvX3N0cnVjdChtX3BuZyk7CkBAIC05Miw5ICs5NSwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IGRlbGV0ZSBbXW1faW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBtX2ludGVybGFjZUJ1ZmZlciA9
IDA7CiAgICAgICAgIG1fcmVhZE9mZnNldCA9IDA7CisgICAgICAgIG1fam9iQ29tcGxldGUgPSBm
YWxzZTsKICAgICB9CiAKLSAgICB2b2lkIGRlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEs
IGJvb2wgc2l6ZU9ubHkpCisgICAgdW5zaWduZWQgY3VycmVudEJ1ZmZlclNpemUoKSBjb25zdCB7
IHJldHVybiBtX2N1cnJlbnRCdWZmZXJTaXplOyB9CisKKyAgICB2b2lkIHNldENvbXBsZXRlKCkg
eyBtX2pvYkNvbXBsZXRlID0gdHJ1ZTsgfQorCisgICAgdm9pZCBkZWNvZGUoY29uc3QgU2hhcmVk
QnVmZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQogICAgIHsKICAgICAgICAgbV9kZWNvZGluZ1Np
emVPbmx5ID0gc2l6ZU9ubHk7CiAKQEAgLTEwNCwxMyArMTEyLDIzIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEdvIGFoZWFkIGFuZCBhc3N1
bWUgd2UgY29uc3VtZWQgYWxsIHRoZSBkYXRhLiAgSWYgd2UgY29uc3VtZSBsZXNzLCB0aGUKLSAg
ICAgICAgLy8gY2FsbGJhY2sgd2lsbCBhZGp1c3Qgb3VyIHJlYWQgb2Zmc2V0IGFjY29yZGluZ2x5
LiAgRG8gbm90IGF0dGVtcHQgdG8gYWRqdXN0IHRoZQotICAgICAgICAvLyBvZmZzZXQgYWZ0ZXIg
cG5nX3Byb2Nlc3NfZGF0YSByZXR1cm5zLgotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3Jl
YWRPZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IGRhdGEuc2l6ZSgpIC0gbV9y
ZWFkT2Zmc2V0OwotICAgICAgICBtX3JlYWRPZmZzZXQgPSBkYXRhLnNpemUoKTsKLSAgICAgICAg
cG5nX3Byb2Nlc3NfZGF0YShtX3BuZywgbV9pbmZvLCAocG5nX2J5dGVwKShkYXRhLmRhdGEoKSkg
KyBvZmZzZXQsIHJlbWFpbmluZyk7CisgICAgICAgIFBOR0ltYWdlRGVjb2RlciogZGVjb2RlciA9
IHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKG1f
cG5nKSk7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNlZ21l
bnQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzZWdtZW50TGVuZ3RoID0gZGF0YS5nZXRTb21lRGF0
YShzZWdtZW50LCBtX3JlYWRPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFzZWdtZW50TGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2pvYkNvbXBsZXRlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChkZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjb2Rlci0+cG5nQ29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3JlYWRPZmZz
ZXQgKz0gc2VnbWVudExlbmd0aDsKKyAgICAgICAgICAgIG1fY3VycmVudEJ1ZmZlclNpemUgPSBt
X3JlYWRPZmZzZXQ7CisgICAgICAgICAgICBwbmdfcHJvY2Vzc19kYXRhKG1fcG5nLCBtX2luZm8s
IHJlaW50ZXJwcmV0X2Nhc3Q8cG5nX2J5dGVwPihjb25zdF9jYXN0PGNoYXIqPihzZWdtZW50KSks
IHNlZ21lbnRMZW5ndGgpOworICAgICAgICAgICAgaWYgKChzaXplT25seSAmJiBkZWNvZGVyLT5p
c1NpemVBdmFpbGFibGUoKSkgfHwgbV9qb2JDb21wbGV0ZSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfTsKICAgICB9CiAKICAgICBib29sIGRlY29kaW5nU2l6ZU9ubHkoKSBjb25z
dCB7IHJldHVybiBtX2RlY29kaW5nU2l6ZU9ubHk7IH0KQEAgLTEzMyw2ICsxNTEsOCBAQCBwcml2
YXRlOgogICAgIHBuZ19pbmZvcCBtX2luZm87CiAgICAgcG5nX2J5dGVwIG1faW50ZXJsYWNlQnVm
ZmVyOwogICAgIGJvb2wgbV9oYXNBbHBoYTsKKyAgICBib29sIG1fam9iQ29tcGxldGU7CisgICAg
dW5zaWduZWQgbV9jdXJyZW50QnVmZmVyU2l6ZTsKIH07CiAKIFBOR0ltYWdlRGVjb2Rlcjo6UE5H
SW1hZ2VEZWNvZGVyKCkKQEAgLTE4OSw3ICsyMDksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKKyAg
ICBtX3JlYWRlci0+ZGVjb2RlKCptX2RhdGEsIHNpemVPbmx5KTsKICAgICAKICAgICBpZiAobV9m
YWlsZWQgfHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJD
YWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKSB7CiAgICAg
ICAgIGRlbGV0ZSBtX3JlYWRlcjsKQEAgLTI5Nyw3ICszMTcsNyBAQCB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKIAogICAgIGlmIChyZWFkZXIoKS0+ZGVjb2RpbmdTaXpl
T25seSgpKSB7CiAgICAgICAgIC8vIElmIHdlIG9ubHkgbmVlZGVkIHRoZSBzaXplLCBoYWx0IHRo
ZSByZWFkZXIuICAgICAKLSAgICAgICAgcmVhZGVyKCktPnNldFJlYWRPZmZzZXQobV9kYXRhLT5z
aXplKCkgLSBwbmctPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAgcmVhZGVyKCktPnNldFJlYWRPZmZz
ZXQocmVhZGVyKCktPmN1cnJlbnRCdWZmZXJTaXplKCkgLSBwbmctPmJ1ZmZlcl9zaXplKTsKICAg
ICAgICAgcG5nLT5idWZmZXJfc2l6ZSA9IDA7CiAgICAgfQogfQpAQCAtNDIzLDYgKzQ0Myw4IEBA
IHZvaWQgcG5nQ29tcGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykKIAogdm9p
ZCBQTkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKCkKIHsKKyAgICBtX3JlYWRlci0+c2V0Q29t
cGxldGUoKTsKKwogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45911</attachid>
            <date>2010-01-05 10:55:53 -0800</date>
            <delta_ts>2010-01-05 13:22:21 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>33213.patch</filename>
            <type>text/plain</type>
            <size>7932</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzY5ZmQ2Zi4uZGNlMWVlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyOCBAQAogMjAxMC0wMS0wNSAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNYWtlIFBORyBpbWFnZSBkZWNvZGVyIHdvcmsgd2l0aCBzZWdtZW50ZWQgU2hhcmVkQnVm
ZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzIx
MworCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6aXNBbGxEYXRhUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VE
ZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpQTkdJbWFnZVJl
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OmN1cnJlbnRCdWZmZXJTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpzZXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQTkdJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVy
QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxl
dGUpOgorCisyMDEwLTAxLTA1ICBZb25nIExpICA8eW9saUByaW0uY29tPgorCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0gUm9iZW4uCiAKICAgICAgICAgRml4ICBidWlsZCB3YXJuaW5ncyBibGlu
ZGx5CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5j
cHAKaW5kZXggYTE2Yjk0MC4uYzU3NzRiZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM4LDEzICszOSwxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVk
QnVmZmVyJiBkYXRhKQogeworICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRzOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGRhdGEuZ2V0U29tZURhdGEoY29udGVudHMsIDApOworCiAgICAgLy8gV2UgbmVl
ZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3Jl
IGRlYWxpbmcgd2l0aC4KLSAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXplKCk7CiAgICAgaWYgKGxl
bmd0aCA8IDQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciog
dUNvbnRlbnRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEuZGF0YSgpOwotICAgIGNvbnN0
IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciog
dUNvbnRlbnRzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY29udGVu
dHMpOwogCiAgICAgLy8gR0lGcyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5KS4KICAgICBpZiAoc3Ry
bmNtcChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAwKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggZGUyNDgyOC4uNDM1NWY2MyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1v
YmlsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0yMDAsNiArMjAxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbWFn
ZURlY29kZXIoKQogICAgICAgICAgICAgOiBtX2ZhaWxlZChmYWxzZSkKICAgICAgICAgICAgICwg
bV9zaXplQXZhaWxhYmxlKGZhbHNlKQorICAgICAgICAgICAgLCBtX2lzQWxsRGF0YVJlY2VpdmVk
KGZhbHNlKQogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAg
ICAgICAsIG1fbWF4TnVtUGl4ZWxzKC0xKQogICAgICAgICAgICAgLCBtX3NjYWxlZChmYWxzZSkK
QEAgLTIxOCw3ICsyMjAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0ID0gMDsKIAogICAgICAgICAvLyBBbGwg
c3BlY2lmaWMgZGVjb2RlciBwbHVnaW5zIG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEg
dGhleSBhcmUgZ2l2ZW4uCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZl
ciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIHsgbV9kYXRhID0gZGF0YTsgfQorICAgICAg
ICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbERhdGFSZWNl
aXZlZDsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtX2RhdGEgPSBk
YXRhOworICAgICAgICAgICAgbV9pc0FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsK
KyAgICAgICAgfQogCiAgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0
aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LiBUaGlzIGRlZmF1bHQKICAgICAgICAgLy8gaW1wbGVt
ZW50YXRpb24ganVzdCByZXR1cm5zIHRydWUgaWYgdGhlIHNpemUgaGFzIGJlZW4gc2V0IGFuZCB3
ZSBoYXZlIG5vdApAQCAtMzI2LDYgKzMzMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGU7CisgICAg
ICAgIGJvb2wgbV9pc0FsbERhdGFSZWNlaXZlZDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAyZWEwMTJiLi5lNzg2ZDhjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDIw
MDEgbW96aWxsYS5vcmcKICAqCkBAIC03NSw2ICs3Niw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2RlY29kaW5nU2l6ZU9ubHkoZmFsc2UpCiAgICAgICAgICwgbV9pbnRlcmxhY2VCdWZmZXIoMCkK
ICAgICAgICAgLCBtX2hhc0FscGhhKDApCisgICAgICAgICwgbV9qb2JDb21wbGV0ZShmYWxzZSkK
KyAgICAgICAgLCBtX2N1cnJlbnRCdWZmZXJTaXplKDApCiAgICAgewogICAgICAgICBtX3BuZyA9
IHBuZ19jcmVhdGVfcmVhZF9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLCAwLCBkZWNvZGlu
Z0ZhaWxlZCwgZGVjb2RpbmdXYXJuaW5nKTsKICAgICAgICAgbV9pbmZvID0gcG5nX2NyZWF0ZV9p
bmZvX3N0cnVjdChtX3BuZyk7CkBAIC05Miw5ICs5NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGRl
bGV0ZSBbXW1faW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBtX2ludGVybGFjZUJ1ZmZlciA9IDA7
CiAgICAgICAgIG1fcmVhZE9mZnNldCA9IDA7CisgICAgICAgIG1fam9iQ29tcGxldGUgPSBmYWxz
ZTsKICAgICB9CiAKLSAgICB2b2lkIGRlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGJv
b2wgc2l6ZU9ubHkpCisgICAgdW5zaWduZWQgY3VycmVudEJ1ZmZlclNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnJlbnRCdWZmZXJTaXplOyB9CisKKyAgICB2b2lkIHNldENvbXBsZXRlKCkgeyBt
X2pvYkNvbXBsZXRlID0gdHJ1ZTsgfQorCisgICAgdm9pZCBkZWNvZGUoY29uc3QgU2hhcmVkQnVm
ZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQogICAgIHsKICAgICAgICAgbV9kZWNvZGluZ1NpemVP
bmx5ID0gc2l6ZU9ubHk7CiAKQEAgLTEwNCwxMyArMTEyLDIzIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEdvIGFoZWFkIGFuZCBhc3N1bWUg
d2UgY29uc3VtZWQgYWxsIHRoZSBkYXRhLiAgSWYgd2UgY29uc3VtZSBsZXNzLCB0aGUKLSAgICAg
ICAgLy8gY2FsbGJhY2sgd2lsbCBhZGp1c3Qgb3VyIHJlYWQgb2Zmc2V0IGFjY29yZGluZ2x5LiAg
RG8gbm90IGF0dGVtcHQgdG8gYWRqdXN0IHRoZQotICAgICAgICAvLyBvZmZzZXQgYWZ0ZXIgcG5n
X3Byb2Nlc3NfZGF0YSByZXR1cm5zLgotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3JlYWRP
ZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IGRhdGEuc2l6ZSgpIC0gbV9yZWFk
T2Zmc2V0OwotICAgICAgICBtX3JlYWRPZmZzZXQgPSBkYXRhLnNpemUoKTsKLSAgICAgICAgcG5n
X3Byb2Nlc3NfZGF0YShtX3BuZywgbV9pbmZvLCAocG5nX2J5dGVwKShkYXRhLmRhdGEoKSkgKyBv
ZmZzZXQsIHJlbWFpbmluZyk7CisgICAgICAgIFBOR0ltYWdlRGVjb2RlciogZGVjb2RlciA9IHN0
YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKG1fcG5n
KSk7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNlZ21lbnQ7
CisgICAgICAgICAgICB1bnNpZ25lZCBzZWdtZW50TGVuZ3RoID0gZGF0YS5nZXRTb21lRGF0YShz
ZWdtZW50LCBtX3JlYWRPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFzZWdtZW50TGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX2pvYkNvbXBsZXRlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChkZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZGVjb2Rlci0+cG5nQ29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3JlYWRPZmZzZXQg
Kz0gc2VnbWVudExlbmd0aDsKKyAgICAgICAgICAgIG1fY3VycmVudEJ1ZmZlclNpemUgPSBtX3Jl
YWRPZmZzZXQ7CisgICAgICAgICAgICBwbmdfcHJvY2Vzc19kYXRhKG1fcG5nLCBtX2luZm8sIHJl
aW50ZXJwcmV0X2Nhc3Q8cG5nX2J5dGVwPihjb25zdF9jYXN0PGNoYXIqPihzZWdtZW50KSksIHNl
Z21lbnRMZW5ndGgpOworICAgICAgICAgICAgaWYgKChzaXplT25seSAmJiBkZWNvZGVyLT5pc1Np
emVBdmFpbGFibGUoKSkgfHwgbV9qb2JDb21wbGV0ZSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfTsKICAgICB9CiAKICAgICBib29sIGRlY29kaW5nU2l6ZU9ubHkoKSBjb25zdCB7
IHJldHVybiBtX2RlY29kaW5nU2l6ZU9ubHk7IH0KQEAgLTEzMyw2ICsxNTEsOCBAQCBwcml2YXRl
OgogICAgIHBuZ19pbmZvcCBtX2luZm87CiAgICAgcG5nX2J5dGVwIG1faW50ZXJsYWNlQnVmZmVy
OwogICAgIGJvb2wgbV9oYXNBbHBoYTsKKyAgICBib29sIG1fam9iQ29tcGxldGU7CisgICAgdW5z
aWduZWQgbV9jdXJyZW50QnVmZmVyU2l6ZTsKIH07CiAKIFBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1h
Z2VEZWNvZGVyKCkKQEAgLTE4OSw3ICsyMDksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wgc2l6ZU9ubHkpCiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKKyAgICBt
X3JlYWRlci0+ZGVjb2RlKCptX2RhdGEsIHNpemVPbmx5KTsKICAgICAKICAgICBpZiAobV9mYWls
ZWQgfHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNo
ZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKSB7CiAgICAgICAg
IGRlbGV0ZSBtX3JlYWRlcjsKQEAgLTI5Nyw3ICszMTcsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6aGVhZGVyQXZhaWxhYmxlKCkKIAogICAgIGlmIChyZWFkZXIoKS0+ZGVjb2RpbmdTaXplT25s
eSgpKSB7CiAgICAgICAgIC8vIElmIHdlIG9ubHkgbmVlZGVkIHRoZSBzaXplLCBoYWx0IHRoZSBy
ZWFkZXIuICAgICAKLSAgICAgICAgcmVhZGVyKCktPnNldFJlYWRPZmZzZXQobV9kYXRhLT5zaXpl
KCkgLSBwbmctPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAgcmVhZGVyKCktPnNldFJlYWRPZmZzZXQo
cmVhZGVyKCktPmN1cnJlbnRCdWZmZXJTaXplKCkgLSBwbmctPmJ1ZmZlcl9zaXplKTsKICAgICAg
ICAgcG5nLT5idWZmZXJfc2l6ZSA9IDA7CiAgICAgfQogfQpAQCAtNDIzLDYgKzQ0Myw4IEBAIHZv
aWQgcG5nQ29tcGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykKIAogdm9pZCBQ
TkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKCkKIHsKKyAgICBtX3JlYWRlci0+c2V0Q29tcGxl
dGUoKTsKKwogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAK
</data>
<flag name="review"
          id="28074"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45927</attachid>
            <date>2010-01-05 13:22:21 -0800</date>
            <delta_ts>2010-01-05 15:10:33 -0800</delta_ts>
            <desc>fixed some issues</desc>
            <filename>33213.patch</filename>
            <type>text/plain</type>
            <size>8400</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzY5ZmQ2Zi4uZGNlMWVlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyOCBAQAogMjAxMC0wMS0wNSAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNYWtlIFBORyBpbWFnZSBkZWNvZGVyIHdvcmsgd2l0aCBzZWdtZW50ZWQgU2hhcmVkQnVm
ZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzIx
MworCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6aXNBbGxEYXRhUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VE
ZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpQTkdJbWFnZVJl
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OmN1cnJlbnRCdWZmZXJTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpzZXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQTkdJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVy
QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxl
dGUpOgorCisyMDEwLTAxLTA1ICBZb25nIExpICA8eW9saUByaW0uY29tPgorCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0gUm9iZW4uCiAKICAgICAgICAgRml4ICBidWlsZCB3YXJuaW5ncyBibGlu
ZGx5CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5j
cHAKaW5kZXggYTE2Yjk0MC4uZDEyMWMxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM0LDE3ICszNSwzNCBAQAogI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgogCit1c2luZyBuYW1l
c3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEltYWdlRGVjb2RlciogSW1hZ2VE
ZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhKQogeworICAgIC8vIFhCTXMg
cmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heE1h
cmtlckxlbmd0aCA9IDg7CisKKyAgICBjaGFyIGNvbnRlbnRzW21heE1hcmtlckxlbmd0aF07Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNvbnN0IGNo
YXIqIG1vcmVDb250ZW50czsKKyAgICAgICAgdW5zaWduZWQgbW9yZUNvbnRlbnRzTGVuZ3RoID0g
ZGF0YS5nZXRTb21lRGF0YShtb3JlQ29udGVudHMsIDApOworICAgICAgICBpZiAoIW1vcmVDb250
ZW50c0xlbmd0aCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB1bnNpZ25lZCBieXRlc1Rv
Q29weSA9IG1pbihtYXhNYXJrZXJMZW5ndGggLSBsZW5ndGgsIG1vcmVDb250ZW50c0xlbmd0aCk7
CisgICAgICAgIG1lbWNweShjb250ZW50cyArIGxlbmd0aCwgbW9yZUNvbnRlbnRzLCBieXRlc1Rv
Q29weSk7CisgICAgICAgIGxlbmd0aCArPSBieXRlc1RvQ29weTsKKyAgICAgICAgaWYgKGxlbmd0
aCA9PSBtYXhNYXJrZXJMZW5ndGgpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKICAgICAv
LyBXZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1h
Z2Ugd2UncmUgZGVhbGluZyB3aXRoLgotICAgIGludCBsZW5ndGggPSBkYXRhLnNpemUoKTsKICAg
ICBpZiAobGVuZ3RoIDwgNCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiB1Q29udGVudHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopZGF0YS5kYXRhKCk7Ci0g
ICAgY29uc3QgY2hhciogY29udGVudHMgPSBkYXRhLmRhdGEoKTsKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiB1Q29udGVudHMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
Pihjb250ZW50cyk7CiAKICAgICAvLyBHSUZzIGJlZ2luIHdpdGggR0lGOCg3IG9yIDkpLgogICAg
IGlmIChzdHJuY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpID09IDApCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCBkZTI0ODI4Li40MzU1ZjYz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkg
VG9yY2ggTW9iaWxlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTIwMCw2ICsyMDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEltYWdlRGVjb2RlcigpCiAgICAgICAgICAgICA6IG1fZmFpbGVkKGZhbHNlKQogICAgICAg
ICAgICAgLCBtX3NpemVBdmFpbGFibGUoZmFsc2UpCisgICAgICAgICAgICAsIG1faXNBbGxEYXRh
UmVjZWl2ZWQoZmFsc2UpCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykK
ICAgICAgICAgICAgICwgbV9tYXhOdW1QaXhlbHMoLTEpCiAgICAgICAgICAgICAsIG1fc2NhbGVk
KGZhbHNlKQpAQCAtMjE4LDcgKzIyMCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgPSAwOwogCiAgICAgICAg
IC8vIEFsbCBzcGVjaWZpYyBkZWNvZGVyIHBsdWdpbnMgbXVzdCBkbyBzb21ldGhpbmcgd2l0aCB0
aGUgZGF0YSB0aGV5IGFyZSBnaXZlbi4KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hh
cmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkgeyBtX2RhdGEgPSBkYXRhOyB9
CisgICAgICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQWxs
RGF0YVJlY2VpdmVkOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZl
ciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
ZGF0YSA9IGRhdGE7CisgICAgICAgICAgICBtX2lzQWxsRGF0YVJlY2VpdmVkID0gYWxsRGF0YVJl
Y2VpdmVkOworICAgICAgICB9CiAKICAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUg
aW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuIFRoaXMgZGVmYXVsdAogICAgICAgICAv
LyBpbXBsZW1lbnRhdGlvbiBqdXN0IHJldHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBoYXMgYmVlbiBz
ZXQgYW5kIHdlIGhhdmUgbm90CkBAIC0zMjYsNiArMzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIEludFNpemUgbV9zaXplOwogICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJs
ZTsKKyAgICAgICAgYm9vbCBtX2lzQWxsRGF0YVJlY2VpdmVkOwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCmluZGV4IDJlYTAxMmIuLmZhMmM4YjYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmls
ZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5
LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdo
dCAoQykgMjAwMSBtb3ppbGxhLm9yZwogICoKQEAgLTc1LDYgKzc2LDggQEAgcHVibGljOgogICAg
ICAgICAsIG1fZGVjb2RpbmdTaXplT25seShmYWxzZSkKICAgICAgICAgLCBtX2ludGVybGFjZUJ1
ZmZlcigwKQogICAgICAgICAsIG1faGFzQWxwaGEoMCkKKyAgICAgICAgLCBtX2hhc0ZpbmlzaGVk
RGVjb2RpbmcoZmFsc2UpCisgICAgICAgICwgbV9jdXJyZW50QnVmZmVyU2l6ZSgwKQogICAgIHsK
ICAgICAgICAgbV9wbmcgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NU
UklORywgMCwgZGVjb2RpbmdGYWlsZWQsIGRlY29kaW5nV2FybmluZyk7CiAgICAgICAgIG1faW5m
byA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QobV9wbmcpOwpAQCAtOTIsOSArOTUsMTQgQEAgcHVi
bGljOgogICAgICAgICBkZWxldGUgW11tX2ludGVybGFjZUJ1ZmZlcjsKICAgICAgICAgbV9pbnRl
cmxhY2VCdWZmZXIgPSAwOwogICAgICAgICBtX3JlYWRPZmZzZXQgPSAwOworICAgICAgICBtX2hh
c0ZpbmlzaGVkRGVjb2RpbmcgPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIGRlY29kZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgc2l6ZU9ubHkpCisgICAgdW5zaWduZWQgY3VycmVu
dEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRCdWZmZXJTaXplOyB9CisKKyAg
ICB2b2lkIHNldENvbXBsZXRlKCkgeyBtX2hhc0ZpbmlzaGVkRGVjb2RpbmcgPSB0cnVlOyB9CisK
KyAgICB2b2lkIGRlY29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgc2l6ZU9ubHkp
CiAgICAgewogICAgICAgICBtX2RlY29kaW5nU2l6ZU9ubHkgPSBzaXplT25seTsKIApAQCAtMTA0
LDEzICsxMTIsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gR28gYWhlYWQgYW5kIGFzc3VtZSB3ZSBjb25zdW1lZCBhbGwgdGhlIGRhdGEu
ICBJZiB3ZSBjb25zdW1lIGxlc3MsIHRoZQotICAgICAgICAvLyBjYWxsYmFjayB3aWxsIGFkanVz
dCBvdXIgcmVhZCBvZmZzZXQgYWNjb3JkaW5nbHkuICBEbyBub3QgYXR0ZW1wdCB0byBhZGp1c3Qg
dGhlCi0gICAgICAgIC8vIG9mZnNldCBhZnRlciBwbmdfcHJvY2Vzc19kYXRhIHJldHVybnMuCi0g
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fcmVhZE9mZnNldDsKLSAgICAgICAgdW5zaWduZWQg
cmVtYWluaW5nID0gZGF0YS5zaXplKCkgLSBtX3JlYWRPZmZzZXQ7Ci0gICAgICAgIG1fcmVhZE9m
ZnNldCA9IGRhdGEuc2l6ZSgpOwotICAgICAgICBwbmdfcHJvY2Vzc19kYXRhKG1fcG5nLCBtX2lu
Zm8sIChwbmdfYnl0ZXApKGRhdGEuZGF0YSgpKSArIG9mZnNldCwgcmVtYWluaW5nKTsKKyAgICAg
ICAgUE5HSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVy
Kj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIobV9wbmcpKTsKKyAgICAgICAgY29uc3QgY2hhciog
c2VnbWVudDsKKyAgICAgICAgd2hpbGUgKHVuc2lnbmVkIHNlZ21lbnRMZW5ndGggPSBkYXRhLmdl
dFNvbWVEYXRhKHNlZ21lbnQsIG1fcmVhZE9mZnNldCkpIHsKKyAgICAgICAgICAgIG1fcmVhZE9m
ZnNldCArPSBzZWdtZW50TGVuZ3RoOworICAgICAgICAgICAgbV9jdXJyZW50QnVmZmVyU2l6ZSA9
IG1fcmVhZE9mZnNldDsKKyAgICAgICAgICAgIHBuZ19wcm9jZXNzX2RhdGEobV9wbmcsIG1faW5m
bywgcmVpbnRlcnByZXRfY2FzdDxwbmdfYnl0ZXA+KGNvbnN0X2Nhc3Q8Y2hhcio+KHNlZ21lbnQp
KSwgc2VnbWVudExlbmd0aCk7CisgICAgICAgICAgICBpZiAoKHNpemVPbmx5ICYmIGRlY29kZXIt
PmlzU2l6ZUF2YWlsYWJsZSgpKSB8fCBtX2hhc0ZpbmlzaGVkRGVjb2RpbmcpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtX2hhc0ZpbmlzaGVkRGVjb2Rp
bmcgJiYgZGVjb2Rlci0+aXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAgICAgICAgICAgIGRlY29kZXIt
PnBuZ0NvbXBsZXRlKCk7CiAgICAgfQogCiAgICAgYm9vbCBkZWNvZGluZ1NpemVPbmx5KCkgY29u
c3QgeyByZXR1cm4gbV9kZWNvZGluZ1NpemVPbmx5OyB9CkBAIC0xMzMsNiArMTQ1LDggQEAgcHJp
dmF0ZToKICAgICBwbmdfaW5mb3AgbV9pbmZvOwogICAgIHBuZ19ieXRlcCBtX2ludGVybGFjZUJ1
ZmZlcjsKICAgICBib29sIG1faGFzQWxwaGE7CisgICAgYm9vbCBtX2hhc0ZpbmlzaGVkRGVjb2Rp
bmc7CisgICAgdW5zaWduZWQgbV9jdXJyZW50QnVmZmVyU2l6ZTsKIH07CiAKIFBOR0ltYWdlRGVj
b2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKCkKQEAgLTE4OSw3ICsyMDMsNyBAQCB2b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIHNpemVP
bmx5KTsKKyAgICBtX3JlYWRlci0+ZGVjb2RlKCptX2RhdGEsIHNpemVPbmx5KTsKICAgICAKICAg
ICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJh
bWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUp
KSB7CiAgICAgICAgIGRlbGV0ZSBtX3JlYWRlcjsKQEAgLTI5Nyw3ICszMTEsNyBAQCB2b2lkIFBO
R0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKIAogICAgIGlmIChyZWFkZXIoKS0+ZGVj
b2RpbmdTaXplT25seSgpKSB7CiAgICAgICAgIC8vIElmIHdlIG9ubHkgbmVlZGVkIHRoZSBzaXpl
LCBoYWx0IHRoZSByZWFkZXIuICAgICAKLSAgICAgICAgcmVhZGVyKCktPnNldFJlYWRPZmZzZXQo
bV9kYXRhLT5zaXplKCkgLSBwbmctPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAgcmVhZGVyKCktPnNl
dFJlYWRPZmZzZXQocmVhZGVyKCktPmN1cnJlbnRCdWZmZXJTaXplKCkgLSBwbmctPmJ1ZmZlcl9z
aXplKTsKICAgICAgICAgcG5nLT5idWZmZXJfc2l6ZSA9IDA7CiAgICAgfQogfQpAQCAtNDIzLDYg
KzQzNyw4IEBAIHZvaWQgcG5nQ29tcGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5m
bykKIAogdm9pZCBQTkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKCkKIHsKKyAgICBtX3JlYWRl
ci0+c2V0Q29tcGxldGUoKTsKKwogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAK
</data>
<flag name="review"
          id="28095"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>