<?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>118415</bug_id>
          
          <creation_ts>2013-07-05 07:49:44 -0700</creation_ts>
          <short_desc>A lot of code duplication within StringImpl &apos;equal&apos; functions</short_desc>
          <delta_ts>2013-07-05 17:36:48 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>118438</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Pozdnyakov">mikhail.pozdnyakov</reporter>
          <assigned_to name="Mikhail Pozdnyakov">mikhail.pozdnyakov</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>906396</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-07-05 07:49:44 -0700</bug_when>
    <thetext>SSIA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906405</commentid>
    <comment_count>1</comment_count>
      <attachid>206153</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-07-05 08:03:23 -0700</bug_when>
    <thetext>Created attachment 206153
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906406</commentid>
    <comment_count>2</comment_count>
      <attachid>206153</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-07-05 08:04:52 -0700</bug_when>
    <thetext>Comment on attachment 206153
patch

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

&gt; Source/WTF/wtf/text/StringImpl.h:869
&gt; +ALWAYS_INLINE bool arraysEqual(const U* a, const V* b, unsigned length)

maybe there is a better place for this function..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906410</commentid>
    <comment_count>3</comment_count>
      <attachid>206153</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-07-05 08:17:51 -0700</bug_when>
    <thetext>Comment on attachment 206153
patch

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

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:869
&gt;&gt; +ALWAYS_INLINE bool arraysEqual(const U* a, const V* b, unsigned length)
&gt; 
&gt; maybe there is a better place for this function..

I think you can just use std::equal here instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906411</commentid>
    <comment_count>4</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-07-05 08:22:55 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 206153 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=206153&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/text/StringImpl.h:869
&gt; &gt;&gt; +ALWAYS_INLINE bool arraysEqual(const U* a, const V* b, unsigned length)
&gt; &gt; 
&gt; &gt; maybe there is a better place for this function..
&gt; 
&gt; I think you can just use std::equal here instead.
Indeed! Thanks for proposal!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906421</commentid>
    <comment_count>5</comment_count>
      <attachid>206156</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-07-05 08:48:17 -0700</bug_when>
    <thetext>Created attachment 206156
patch v2

Using std::equal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906445</commentid>
    <comment_count>6</comment_count>
      <attachid>206156</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-05 10:25:53 -0700</bug_when>
    <thetext>Comment on attachment 206156
patch v2

Clearing flags on attachment: 206156

Committed r152418: &lt;http://trac.webkit.org/changeset/152418&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906446</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-05 10:25:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906447</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-07-05 10:34:22 -0700</bug_when>
    <thetext>The second half of the patch is a bad change IMHO.

Those two:
   bool equal(const LChar* a, const LChar* b, unsigned length)
   bool equal(const UChar* a, const UChar* b, unsigned length)
are the slow path not used by anyone. They were kept like that for clarity.

I you want to replace them, it should be with memcmp, not std::equal.


For
   bool equal(const LChar* a, const UChar* b, unsigned length)
   bool equal(const UChar* a, const LChar* b, unsigned length)
chances is are you will cause worst code to be generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906451</commentid>
    <comment_count>9</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-07-05 10:44:59 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; The second half of the patch is a bad change IMHO.
&gt; 
&gt; Those two:
&gt;    bool equal(const LChar* a, const LChar* b, unsigned length)
&gt;    bool equal(const UChar* a, const UChar* b, unsigned length)
&gt; are the slow path not used by anyone. They were kept like that for clarity.
&gt; 
&gt; I you want to replace them, it should be with memcmp, not std::equal.

The compiler will optimize std::equal to memcmp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906475</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-07-05 13:51:50 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; The compiler will optimize std::equal to memcmp.

No it won&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906481</commentid>
    <comment_count>11</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-07-05 14:31:32 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; The second half of the patch is a bad change IMHO.
&gt; 
I wouldn&apos;t say it&apos;s a bad change, yes performance is not improved and it is the same as before, but the code became more compact and clear (and not duplicated) which was the goal of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906485</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-07-05 14:49:43 -0700</bug_when>
    <thetext>&gt; I wouldn&apos;t say it&apos;s a bad change, yes performance is not improved and it is the same as before, but the code became more compact and clear (and not duplicated) which was the goal of the patch.

I don&apos;t know why you would say that.

Obviously the performance is gonna be worse than before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906498</commentid>
    <comment_count>13</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-07-05 16:02:47 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; I wouldn&apos;t say it&apos;s a bad change, yes performance is not improved and it is the same as before, but the code became more compact and clear (and not duplicated) which was the goal of the patch.
&gt; 
&gt; I don&apos;t know why you would say that.
&gt; 
&gt; Obviously the performance is gonna be worse than before.

I don’t think the std::equal loop is slower than the for loop - in a test program I see identical code being generated with clang.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906504</commentid>
    <comment_count>14</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-07-05 16:21:29 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I don’t think the std::equal loop is slower than the for loop - in a test program I see identical code being generated with clang.

Did you use a compile time constant as your length parameter?
If not, I don&apos;t see how the compiler will optimize that code.

Okay, I gave that a shot.
No matter which optimization level I chose, Clang always gives me this for std::equal():
0000bfc0            2301        movs    r3, #0x1
0000bfc2            b172        cbz     r2, 0xbfe2
0000bfc4        f8919000        ldrb.w  r9, [r1]
0000bfc8            2300        movs    r3, #0x0
0000bfca        f890c000        ldrb.w  r12, [r0]
0000bfce            45cc        cmp     r12, r9
0000bfd0            d107        bne     0xbfe2
0000bfd2            3a01        subs    r2, #0x1
0000bfd4        f1010101        add.w   r1, r1, #0x1
0000bfd8        f1000001        add.w   r0, r0, #0x1
0000bfdc        f04f0301        mov.w   r3, #0x1
0000bfe0            d1f0        bne     0xbfc4
0000bfe2            4618        mov     r0, r3
0000bfe4            4770        bx      lr
0000bfe6            bf00        nop</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206153</attachid>
            <date>2013-07-05 08:03:23 -0700</date>
            <delta_ts>2013-07-05 08:48:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug118415</filename>
            <type>text/plain</type>
            <size>5849</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDI3Y2Q5MGFlOTU1YzAxZDJhMzBhMzg1MDU5Y2I2NjA2NWQ0MmY4YjQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCA1IDE3OjU5OjAwIDIwMTMgKzAzMDAKCiAgICBidWcxMTg0MTUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEyNTQx
OGQuLmI5NGNiZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDctMDUgIE1pa2hhaWwgUG96
ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAgICAgICAgQSBsb3Qg
b2YgY29kZSBkdXBsaWNhdGlvbiB3aXRoaW4gU3RyaW5nSW1wbCAnZXF1YWwnIGZ1bmN0aW9ucwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDE1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgaGFz
IGJlZW4gYSBsb3Qgb2YgY29kZSBkdXBsaWNhdGlvbiB3aXRoaW4gU3RyaW5nSW1wbCAnZXF1YWwn
IGZ1bmN0aW9uczoKKyAgICAgICAgdGhlIHdob2xlIGxvZ2ljIHdhcyBjb3BpZWQgdG8gZXZlcnkg
b3ZlcmxvYWRlZCAnZXF1YWwnIGZ1bmN0aW9uLgorICAgICAgICBGaXhlZCBub3cgdXNpbmcgdGVt
cGxhdGVzLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChX
VEY6OmVxdWFsSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjplcXVhbCk6CisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjphcnJheXNFcXVhbCk6CisgICAgICAg
IChXVEY6OmVxdWFsKToKKwogMjAxMy0wNy0wMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10gVW5yZXZpZXdlZCBidWlsZCBjb3JyZWN0aW9u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggODQ2MjYzMS4uYjhlODY5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0xNzM2LDIxICsxNzM2LDMxIEBAIGJvb2wg
ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5nSW1wbCogYikKICAgICByZXR1
cm4gc3RyaW5nSW1wbENvbnRlbnRFcXVhbChhLCBiKTsKIH0KIAotYm9vbCBlcXVhbChjb25zdCBT
dHJpbmdJbXBsKiBhLCBjb25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wgZXF1YWxJbnRlcm5hbChjb25zdCBTdHJp
bmdJbXBsKiBhLCBjb25zdCBDaGFyVHlwZSogYiwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlm
ICghYSkKICAgICAgICAgcmV0dXJuICFiOwogICAgIGlmICghYikKLSAgICAgICAgcmV0dXJuICFh
OwotCi0gICAgaWYgKGxlbmd0aCAhPSBhLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgaWYgKGEtPmxlbmd0aCgpICE9IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChhLT5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGVxdWFsKGEtPmNoYXJhY3Rl
cnM4KCksIGIsIGxlbmd0aCk7CiAgICAgcmV0dXJuIGVxdWFsKGEtPmNoYXJhY3RlcnMxNigpLCBi
LCBsZW5ndGgpOwogfQogCitib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IExD
aGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGVxdWFsSW50ZXJuYWwoYSwg
YiwgbGVuZ3RoKTsKK30KKworYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBV
Q2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBlcXVhbEludGVybmFsKGEs
IGIsIGxlbmd0aCk7Cit9CisKIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3Qg
TENoYXIqIGIpCiB7CiAgICAgaWYgKCFhKQpAQCAtMTc4NiwyMCArMTc5Niw2IEBAIGJvb2wgZXF1
YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgTENoYXIqIGIpCiAgICAgcmV0dXJuICFiW2xl
bmd0aF07CiB9CiAKLWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgVUNoYXIq
IGIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoIWEpCi0gICAgICAgIHJldHVybiAhYjsK
LSAgICBpZiAoIWIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLT5sZW5ndGgo
KSAhPSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS0+aXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBlcXVhbChhLT5jaGFyYWN0ZXJzOCgpLCBiLCBsZW5ndGgpOwotICAg
IHJldHVybiBlcXVhbChhLT5jaGFyYWN0ZXJzMTYoKSwgYiwgbGVuZ3RoKTsKLX0KLQogYm9vbCBl
cXVhbE5vbk51bGwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5nSW1wbCogYikKIHsK
ICAgICBBU1NFUlQoYSAmJiBiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggZDNjYTFm
Zi4uNWVjZThiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgK
KysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTg1OSwxMiArODU5LDIz
IEBAIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBj
b25zdCBTdHJpbmdJbXBsKik7CiBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbChjb25z
dCBTdHJpbmdJbXBsKiwgY29uc3QgTENoYXIqKTsKIGlubGluZSBib29sIGVxdWFsKGNvbnN0IFN0
cmluZ0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH0KIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVx
dWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsKK1dURl9FWFBP
UlRfU1RSSU5HX0FQSSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hhcios
IHVuc2lnbmVkKTsKIGlubGluZSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0
IGNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gZXF1YWwoYSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KGIpLCBsZW5ndGgpOyB9CiBpbmxpbmUgYm9vbCBlcXVhbChjb25z
dCBMQ2hhciogYSwgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gZXF1YWwoYiwgYSk7IH0KIGlubGlu
ZSBib29sIGVxdWFsKGNvbnN0IGNoYXIqIGEsIFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIGVxdWFs
KGIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhKSk7IH0KLVdURl9FWFBPUlRfU1RS
SU5HX0FQSSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hhciosIHVuc2ln
bmVkKTsKIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsTm9uTnVsbChjb25zdCBTdHJp
bmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKTsKIAordGVtcGxhdGUgPHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+CitBTFdBWVNfSU5MSU5FIGJvb2wgYXJyYXlzRXF1YWwoY29uc3QgVSogYSwg
Y29uc3QgViogYiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgIT0gbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gRG8g
Y29tcGFyaXNvbnMgOCBvciA0IGJ5dGVzLWF0LWEtdGltZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJl
IGl0J3Mgc2FmZS4KICNpZiBDUFUoWDg2XzY0KQogQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNv
bnN0IExDaGFyKiBhLCBjb25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQpAQCAtMTA2OCw0
NyArMTA3OSwxMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgZXF1YWwoY29uc3QgVUNoYXIqIGEsIGNv
bnN0IFVDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgcmV0dXJuIGlzRXF1YWw7CiB9CiAj
ZWxzZQotQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhLCBjb25zdCBMQ2hh
ciogYiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0g
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElO
RSBib29sIGVxdWFsKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWduZWQgbGVu
Z3RoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKGFbaV0gIT0gYltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KK0FMV0FZU19JTkxJTkUgYm9vbCBlcXVhbChjb25zdCBM
Q2hhciogYSwgY29uc3QgTENoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gYXJyYXlz
RXF1YWwoYSwgYiwgbGVuZ3RoKTsgfQorQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IFVD
aGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBhcnJheXNF
cXVhbChhLCBiLCBsZW5ndGgpOyB9CiAjZW5kaWYKIAotQUxXQVlTX0lOTElORSBib29sIGVxdWFs
KGNvbnN0IExDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFb
aV0gIT0gYltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IFVDaGFyKiBhLCBj
b25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQorQUxX
QVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5z
aWduZWQgbGVuZ3RoKSB7IHJldHVybiBhcnJheXNFcXVhbChhLCBiLCBsZW5ndGgpOyB9CitBTFdB
WVNfSU5MSU5FIGJvb2wgZXF1YWwoY29uc3QgVUNoYXIqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNp
Z25lZCBsZW5ndGgpIHsgcmV0dXJuIGFycmF5c0VxdWFsKGEsIGIsIGxlbmd0aCk7IH0KIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZ0ltcGwq
LCBjb25zdCBTdHJpbmdJbXBsKik7CiBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbEln
bm9yaW5nQ2FzZShjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENoYXIqKTsKIGlubGluZSBib29s
IGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7
IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShiLCBhKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206156</attachid>
            <date>2013-07-05 08:48:17 -0700</date>
            <delta_ts>2013-07-05 10:25:52 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>bug118415_v2</filename>
            <type>text/plain</type>
            <size>5541</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDcxMWRmYTBjZmRlZTIyMDA4MDFmNGRmYzQ2OGRkZjg2YzdhZDhiOTQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCA1IDE3OjU5OjAwIDIwMTMgKzAzMDAKCiAgICBidWcxMTg0MTUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEyNTQx
OGQuLjI4NjI4MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDctMDUgIE1pa2hhaWwgUG96
ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAgICAgICAgQSBsb3Qg
b2YgY29kZSBkdXBsaWNhdGlvbiB3aXRoaW4gU3RyaW5nSW1wbCAnZXF1YWwnIGZ1bmN0aW9ucwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDE1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgaGFz
IGJlZW4gYSBsb3Qgb2YgY29kZSBkdXBsaWNhdGlvbiB3aXRoaW4gU3RyaW5nSW1wbCAnZXF1YWwn
IGZ1bmN0aW9uczoKKyAgICAgICAgdGhlIHdob2xlIGxvZ2ljIHdhcyBjb3BpZWQgdG8gZXZlcnkg
b3ZlcmxvYWRlZCAnZXF1YWwnIGZ1bmN0aW9uLgorICAgICAgICBGaXhlZCBub3cgdXNpbmcgdGVt
cGxhdGVzIGFuZCBzdGQ6OmVxdWFsLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5j
cHA6CisgICAgICAgIChXVEY6OmVxdWFsSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjplcXVhbCk6
CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjphcnJheXNF
cXVhbCk6CisgICAgICAgIChXVEY6OmVxdWFsKToKKwogMjAxMy0wNy0wMyAgQnJlbnQgRnVsZ2hh
bSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10gVW5yZXZpZXdlZCBi
dWlsZCBjb3JyZWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggODQ2MjYz
MS4uYjhlODY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0xNzM2LDIxICsx
NzM2LDMxIEBAIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5nSW1w
bCogYikKICAgICByZXR1cm4gc3RyaW5nSW1wbENvbnRlbnRFcXVhbChhLCBiKTsKIH0KIAotYm9v
bCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVu
Z3RoKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wgZXF1YWxJbnRl
cm5hbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBDaGFyVHlwZSogYiwgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIGlmICghYSkKICAgICAgICAgcmV0dXJuICFiOwogICAgIGlmICghYikKLSAg
ICAgICAgcmV0dXJuICFhOwotCi0gICAgaWYgKGxlbmd0aCAhPSBhLT5sZW5ndGgoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGEtPmxlbmd0aCgpICE9IGxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChhLT5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIGVx
dWFsKGEtPmNoYXJhY3RlcnM4KCksIGIsIGxlbmd0aCk7CiAgICAgcmV0dXJuIGVxdWFsKGEtPmNo
YXJhY3RlcnMxNigpLCBiLCBsZW5ndGgpOwogfQogCitib29sIGVxdWFsKGNvbnN0IFN0cmluZ0lt
cGwqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGVx
dWFsSW50ZXJuYWwoYSwgYiwgbGVuZ3RoKTsKK30KKworYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJ
bXBsKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBl
cXVhbEludGVybmFsKGEsIGIsIGxlbmd0aCk7Cit9CisKIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5n
SW1wbCogYSwgY29uc3QgTENoYXIqIGIpCiB7CiAgICAgaWYgKCFhKQpAQCAtMTc4NiwyMCArMTc5
Niw2IEBAIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgTENoYXIqIGIpCiAg
ICAgcmV0dXJuICFiW2xlbmd0aF07CiB9CiAKLWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCog
YSwgY29uc3QgVUNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoIWEpCi0gICAg
ICAgIHJldHVybiAhYjsKLSAgICBpZiAoIWIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChhLT5sZW5ndGgoKSAhPSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoYS0+aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBlcXVhbChhLT5jaGFyYWN0ZXJzOCgpLCBi
LCBsZW5ndGgpOwotICAgIHJldHVybiBlcXVhbChhLT5jaGFyYWN0ZXJzMTYoKSwgYiwgbGVuZ3Ro
KTsKLX0KLQogYm9vbCBlcXVhbE5vbk51bGwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3Ry
aW5nSW1wbCogYikKIHsKICAgICBBU1NFUlQoYSAmJiBiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBs
LmgKaW5kZXggZDNjYTFmZi4uNzZkYWMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAg
LTg1OSwxMCArODU5LDEwIEBAIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsKGNvbnN0
IFN0cmluZ0ltcGwqLCBjb25zdCBTdHJpbmdJbXBsKik7CiBXVEZfRVhQT1JUX1NUUklOR19BUEkg
Ym9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENoYXIqKTsKIGlubGluZSBib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIGVxdWFs
KGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH0KIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciosIHVuc2ln
bmVkKTsKK1dURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwq
LCBjb25zdCBVQ2hhciosIHVuc2lnbmVkKTsKIGlubGluZSBib29sIGVxdWFsKGNvbnN0IFN0cmlu
Z0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gZXF1YWwo
YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpLCBsZW5ndGgpOyB9CiBpbmxpbmUg
Ym9vbCBlcXVhbChjb25zdCBMQ2hhciogYSwgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gZXF1YWwo
YiwgYSk7IH0KIGlubGluZSBib29sIGVxdWFsKGNvbnN0IGNoYXIqIGEsIFN0cmluZ0ltcGwqIGIp
IHsgcmV0dXJuIGVxdWFsKGIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhKSk7IH0K
LVdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25z
dCBVQ2hhciosIHVuc2lnbmVkKTsKIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsTm9u
TnVsbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKTsKIAogLy8gRG8g
Y29tcGFyaXNvbnMgOCBvciA0IGJ5dGVzLWF0LWEtdGltZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJl
IGl0J3Mgc2FmZS4KQEAgLTEwNjgsNDcgKzEwNjgsMTIgQEAgQUxXQVlTX0lOTElORSBib29sIGVx
dWFsKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQogICAg
IHJldHVybiBpc0VxdWFsOwogfQogI2Vsc2UKLUFMV0FZU19JTkxJTkUgYm9vbCBlcXVhbChjb25z
dCBMQ2hhciogYSwgY29uc3QgTENoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChhW2ldICE9
IGJbaV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3Qg
VUNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
ICE9IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChhW2ldICE9IGJbaV0pCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19CitBTFdBWVNfSU5M
SU5FIGJvb2wgZXF1YWwoY29uc3QgTENoYXIqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNpZ25lZCBs
ZW5ndGgpIHsgcmV0dXJuIHN0ZDo6ZXF1YWwoYSwgYSArIGxlbmd0aCwgYik7IH0KK0FMV0FZU19J
TkxJTkUgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIHVuc2lnbmVk
IGxlbmd0aCkgeyByZXR1cm4gc3RkOjplcXVhbChhLCBhICsgbGVuZ3RoLCBiKTsgfQogI2VuZGlm
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBlcXVhbChjb25zdCBMQ2hhciogYSwgY29uc3QgVUNoYXIq
IGIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChhW2ldICE9IGJbaV0pCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
Ym9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3QgTENoYXIqIGIsIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGlmIChhW2ldICE9IGJbaV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KK0FMV0FZU19JTkxJTkUgYm9vbCBlcXVhbChjb25zdCBM
Q2hhciogYSwgY29uc3QgVUNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gc3RkOjpl
cXVhbChhLCBhICsgbGVuZ3RoLCBiKTsgfQorQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0
IFVDaGFyKiBhLCBjb25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBzdGQ6
OmVxdWFsKGEsIGEgKyBsZW5ndGgsIGIpOyB9CiBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBl
cXVhbElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgU3RyaW5nSW1wbCopOwog
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5n
SW1wbCosIGNvbnN0IExDaGFyKik7CiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25z
dCBMQ2hhciogYSwgY29uc3QgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nh
c2UoYiwgYSk7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>