<?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>99363</bug_id>
          
          <creation_ts>2012-10-15 14:06:57 -0700</creation_ts>
          <short_desc>StringImpl::reverseFind() with a single match character isn&apos;t optimal for mixed 8/16 bit cases</short_desc>
          <delta_ts>2012-10-16 16:09:43 -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>JavaScriptCore</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="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>benjamin</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>742403</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-15 14:06:57 -0700</bug_when>
    <thetext>StringImpl::reverseFind() has code to handle single character matches optimally if both the subject and match strings are the same bit-ness.  The code should be optimized for all four bit ness combinations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742424</commentid>
    <comment_count>1</comment_count>
      <attachid>168778</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-15 14:16:15 -0700</bug_when>
    <thetext>Created attachment 168778
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742510</commentid>
    <comment_count>2</comment_count>
      <attachid>168778</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-15 15:21:49 -0700</bug_when>
    <thetext>Comment on attachment 168778
Patch

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

&gt; Source/WTF/wtf/text/StringImpl.cpp:1145
&gt; +        return WTF::reverseFind(characters(), ourLength, matchCharacter, index);

characters() -&gt; characters16()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742567</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-15 16:19:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 168778 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168778&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.cpp:1145
&gt; &gt; +        return WTF::reverseFind(characters(), ourLength, matchCharacter, index);
&gt; 
&gt; characters() -&gt; characters16()

Done in my sandbox, want another patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742588</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-15 16:46:11 -0700</bug_when>
    <thetext>&gt; &gt; characters() -&gt; characters16()
&gt; 
&gt; Done in my sandbox, want another patch?

That&apos;s ok, that was just a quick comment before going out. I&apos;ll have a look at your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742591</commentid>
    <comment_count>5</comment_count>
      <attachid>168778</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-15 16:54:21 -0700</bug_when>
    <thetext>Comment on attachment 168778
Patch

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

&gt; Source/WTF/wtf/text/StringImpl.cpp:1035
&gt; +        UChar matchCharacter = matchString-&gt;is8Bit() ? matchString-&gt;characters8()[0] : matchString-&gt;characters16()[0];

StringImpl&apos;s operator[] does that for you.

&gt; Source/WTF/wtf/text/StringImpl.cpp:-1135
&gt; -        if (is8Bit() &amp;&amp; matchString-&gt;is8Bit())
&gt; -            return WTF::reverseFind(characters8(), ourLength, matchString-&gt;characters8()[0], index);
&gt; -        return WTF::reverseFind(characters(), ourLength, matchString-&gt;characters()[0], index);

This was intentional as the reverseFind(LChar*, UChar) was not implemented. Then I forgot about it.

Does WTF::reverseFind() has this combination now? I don&apos;t see it in StringImpl.h.

&gt; Source/WTF/wtf/text/StringImpl.cpp:1141
&gt; +        UChar matchCharacter = matchString-&gt;is8Bit() ? matchString-&gt;characters8()[0] : matchString-&gt;characters16()[0];

see StringImpl&apos;s operator[].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742694</commentid>
    <comment_count>6</comment_count>
      <attachid>168832</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-15 18:27:09 -0700</bug_when>
    <thetext>Created attachment 168832
Patch with review updates

(In reply to comment #5)
&gt; (From update of attachment 168778 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168778&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.cpp:1035
&gt; &gt; +        UChar matchCharacter = matchString-&gt;is8Bit() ? matchString-&gt;characters8()[0] : matchString-&gt;characters16()[0];
&gt; 
&gt; StringImpl&apos;s operator[] does that for you.

Fixed.  I think I added operator[].

&gt; &gt; Source/WTF/wtf/text/StringImpl.cpp:-1135
&gt; &gt; -        if (is8Bit() &amp;&amp; matchString-&gt;is8Bit())
&gt; &gt; -            return WTF::reverseFind(characters8(), ourLength, matchString-&gt;characters8()[0], index);
&gt; &gt; -        return WTF::reverseFind(characters(), ourLength, matchString-&gt;characters()[0], index);
&gt; 
&gt; This was intentional as the reverseFind(LChar*, UChar) was not implemented. Then I forgot about it.
&gt; 
&gt; Does WTF::reverseFind() has this combination now? I don&apos;t see it in StringImpl.h.

I updated reverseFind() to be like find().

&gt; &gt; Source/WTF/wtf/text/StringImpl.cpp:1141
&gt; &gt; +        UChar matchCharacter = matchString-&gt;is8Bit() ? matchString-&gt;characters8()[0] : matchString-&gt;characters16()[0];
&gt; 
&gt; see StringImpl&apos;s operator[].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742699</commentid>
    <comment_count>7</comment_count>
      <attachid>168832</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-15 18:32:46 -0700</bug_when>
    <thetext>Comment on attachment 168832
Patch with review updates

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

&gt; Source/WTF/wtf/text/StringImpl.h:1015
&gt; +ALWAYS_INLINE size_t reverseFind(const UChar* characters, unsigned length, LChar matchCharacter, unsigned index = 0)

default value of index looks wrong.

&gt; Source/WTF/wtf/text/StringImpl.h:1020
&gt; +inline size_t reverseFind(const LChar* characters, unsigned length, UChar matchCharacter, unsigned index = 0)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742738</commentid>
    <comment_count>8</comment_count>
      <attachid>168832</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-15 20:02:04 -0700</bug_when>
    <thetext>Comment on attachment 168832
Patch with review updates

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

&gt; Source/WTF/wtf/text/StringImpl.h:1022
&gt; +    if (matchCharacter &amp; ~0xFF)

Not happy with the magic math here. There’s a reason we have a named function isASCII for the case like this with 0x7F, and I’d prefer a named functin for this kind of use too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743666</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-16 16:09:43 -0700</bug_when>
    <thetext>Committed r131524: &lt;http://trac.webkit.org/changeset/131524&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168778</attachid>
            <date>2012-10-15 14:16:15 -0700</date>
            <delta_ts>2012-10-15 18:27:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>99363.patch</filename>
            <type>text/plain</type>
            <size>2833</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzEzNTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTEwLTE1ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKCkgd2l0
aCBhIHNpbmdsZSBtYXRjaCBjaGFyYWN0ZXIgaXNuJ3Qgb3B0aW1hbCBmb3IgbWl4ZWQgOC8xNiBi
aXQgY2FzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk5MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RmFjdG9yZWQgb3V0IHRoZSA4LzE2IGJpdG5lc3MgY2hlY2sgb2YgdGhlIG1hdGNoIGNoYXJhY3Rl
ciBmcm9tIHRoZSBzdWJqZWN0IGNoYXJhY3RlciBiaXRuZXNzCisgICAgICAgIGNoZWNrLiAgRGlk
IHRoaXMgZm9yIGJvdGggZmluZCgpIGFuZCByZXZlcnNlRmluZCgpLgorCisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZpbmQpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXZlcnNlRmluZCk6CisKIDIwMTItMTAtMTUgIE1h
cmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXJhbGxl
bCBHQyBzaG91bGQgbm90IGJlIGRpc2FibGVkIGZvciBhbGwgcGxhdGZvcm1zCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDEzMTMxMSkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEsMTQgKzEwMzIs
MTEgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoU3RyaW5nSW1wbCogbWF0YwogCiAgICAgLy8g
T3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5ndGggMS4KICAgICBp
ZiAobWF0Y2hMZW5ndGggPT0gMSkgewotICAgICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAg
ICAgIGlmIChtYXRjaFN0cmluZy0+aXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6ZmluZChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnM4
KClbMF0sIGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczgo
KSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKVswXSwgaW5kZXgpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChtYXRjaFN0cmluZy0+aXM4Qml0KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNo
YXJhY3RlcnM4KClbMF0sIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKVswXSwgaW5kZXgp
OworICAgICAgICBVQ2hhciBtYXRjaENoYXJhY3RlciA9IG1hdGNoU3RyaW5nLT5pczhCaXQoKSA/
IG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzOCgpWzBdIDogbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMx
NigpWzBdOworICAgICAgICAKKyAgICAgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgbWF0Y2hDaGFyYWN0ZXIsIGlu
ZGV4KTsKKyAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCks
IG1hdGNoQ2hhcmFjdGVyLCBpbmRleCk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKCFtYXRj
aExlbmd0aCkpCkBAIC0xMTMwLDkgKzExMzgsMTEgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVy
c2VGaW5kKFN0cmluZ0ltcAogCiAgICAgLy8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Ig
c3RyaW5ncyBvZiBsZW5ndGggMS4KICAgICBpZiAobWF0Y2hMZW5ndGggPT0gMSkgewotICAgICAg
ICBpZiAoaXM4Qml0KCkgJiYgbWF0Y2hTdHJpbmctPmlzOEJpdCgpKQotICAgICAgICAgICAgcmV0
dXJuIFdURjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVyczgoKSwgb3VyTGVuZ3RoLCBtYXRjaFN0cmlu
Zy0+Y2hhcmFjdGVyczgoKVswXSwgaW5kZXgpOwotICAgICAgICByZXR1cm4gV1RGOjpyZXZlcnNl
RmluZChjaGFyYWN0ZXJzKCksIG91ckxlbmd0aCwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKVsw
XSwgaW5kZXgpOworICAgICAgICBVQ2hhciBtYXRjaENoYXJhY3RlciA9IG1hdGNoU3RyaW5nLT5p
czhCaXQoKSA/IG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzOCgpWzBdIDogbWF0Y2hTdHJpbmctPmNo
YXJhY3RlcnMxNigpWzBdOworCisgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6OnJldmVyc2VGaW5kKGNoYXJhY3RlcnM4KCksIG91ckxlbmd0aCwgbWF0Y2hDaGFy
YWN0ZXIsIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVy
cygpLCBvdXJMZW5ndGgsIG1hdGNoQ2hhcmFjdGVyLCBpbmRleCk7CiAgICAgfQogCiAgICAgLy8g
Q2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCg==
</data>
<flag name="review"
          id="181854"
          type_id="1"
          status="-"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="181855"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168832</attachid>
            <date>2012-10-15 18:27:09 -0700</date>
            <delta_ts>2012-10-15 20:02:04 -0700</delta_ts>
            <desc>Patch with review updates</desc>
            <filename>99363-3.patch</filename>
            <type>text/plain</type>
            <size>4297</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzEzOTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTEwLTE1ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKCkgd2l0
aCBhIHNpbmdsZSBtYXRjaCBjaGFyYWN0ZXIgaXNuJ3Qgb3B0aW1hbCBmb3IgbWl4ZWQgOC8xNiBi
aXQgY2FzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk5MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RmFjdG9yZWQgb3V0IHRoZSA4LzE2IGJpdG5lc3MgY2hlY2sgb2YgdGhlIG1hdGNoIGNoYXJhY3Rl
ciBmcm9tIHRoZSBzdWJqZWN0IGNoYXJhY3RlciBiaXRuZXNzCisgICAgICAgIGNoZWNrLiAgRGlk
IHRoaXMgZm9yIGJvdGggZmluZCgpIGFuZCByZXZlcnNlRmluZCgpLiAgQWRkZWQgYWxsIFVDaGFy
L0xDaGFyIGNvbWJpbmF0aW9ucyB0byB0aGUKKyAgICAgICAgaW5saW5lIHJldmVyc2VGaW5kKCku
CisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6ZmluZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKToK
KyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OnJldmVyc2VG
aW5kKToKKwogMjAxMi0xMC0xNSAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmVtb3ZlIFdURjo6ZmFzdERlbGV0ZUFsbFZhbHVlcygpLgpJbmRleDogU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxMzEzMTEpCisrKyBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIxLDE0ICsxMDIxLDkg
QEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoU3RyaW5nSW1wbCogbWF0YwogCiAgICAgLy8gT3B0
aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5ndGggMS4KICAgICBpZiAo
bWF0Y2hMZW5ndGggPT0gMSkgewotICAgICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgICAg
IGlmIChtYXRjaFN0cmluZy0+aXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6
ZmluZChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnM4KClb
MF0sIGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczgoKSwg
bGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKVswXSwgaW5kZXgpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtYXRjaFN0cmluZy0+aXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1
cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJh
Y3RlcnM4KClbMF0sIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKVswXSwgaW5kZXgpOwor
ICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJh
Y3RlcnM4KCksIGxlbmd0aCgpLCAoKm1hdGNoU3RyaW5nKVswXSwgaW5kZXgpOworICAgICAgICBy
ZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgKCptYXRjaFN0cmluZylb
MF0sIGluZGV4KTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoIW1hdGNoTGVuZ3RoKSkKQEAg
LTExMzAsOSArMTEyNSw5IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZChTdHJpbmdJ
bXAKIAogICAgIC8vIE9wdGltaXphdGlvbiAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVu
Z3RoIDEuCiAgICAgaWYgKG1hdGNoTGVuZ3RoID09IDEpIHsKLSAgICAgICAgaWYgKGlzOEJpdCgp
ICYmIG1hdGNoU3RyaW5nLT5pczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6OnJldmVy
c2VGaW5kKGNoYXJhY3RlcnM4KCksIG91ckxlbmd0aCwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnM4
KClbMF0sIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVy
cygpLCBvdXJMZW5ndGgsIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzKClbMF0sIGluZGV4KTsKKyAg
ICAgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQo
Y2hhcmFjdGVyczgoKSwgb3VyTGVuZ3RoLCAoKm1hdGNoU3RyaW5nKVswXSwgaW5kZXgpOworICAg
ICAgICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzMTYoKSwgb3VyTGVuZ3RoLCAo
Km1hdGNoU3RyaW5nKVswXSwgaW5kZXgpOwogICAgIH0KIAogICAgIC8vIENoZWNrIGluZGV4ICYg
bWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJ
KHJldmlzaW9uIDEzMTMxMSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OTgsNyArOTk4LDggQEAgaW5saW5lIHNpemVfdCBmaW5kKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZQogICAgIHJldHVybiBub3RGb3VuZDsKIH0KIAotaW5saW5lIHNpemVf
dCByZXZlcnNlRmluZChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBM
Q2hhciBtYXRjaENoYXJhY3RlciwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01BWCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5lIHNpemVfdCByZXZlcnNlRmluZChjb25z
dCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENoYXJhY3RlclR5
cGUgbWF0Y2hDaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4ID0gVUlOVF9NQVgpCiB7CiAgICAgaWYg
KCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBub3RGb3VuZDsKQEAgLTEwMTEsMTcgKzEwMTIsMTYg
QEAgaW5saW5lIHNpemVfdCByZXZlcnNlRmluZChjb25zdCBMQ2hhciogYwogICAgIHJldHVybiBp
bmRleDsKIH0KIAotaW5saW5lIHNpemVfdCByZXZlcnNlRmluZChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciBtYXRjaENoYXJhY3RlciwgdW5zaWduZWQgaW5k
ZXggPSBVSU5UX01BWCkKK0FMV0FZU19JTkxJTkUgc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIExDaGFyIG1hdGNoQ2hhcmFjdGVyLCB1
bnNpZ25lZCBpbmRleCA9IDApCiB7Ci0gICAgaWYgKCFsZW5ndGgpCisgICAgcmV0dXJuIHJldmVy
c2VGaW5kKGNoYXJhY3RlcnMsIGxlbmd0aCwgc3RhdGljX2Nhc3Q8VUNoYXI+KG1hdGNoQ2hhcmFj
dGVyKSwgaW5kZXgpOworfQorCitpbmxpbmUgc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyIG1hdGNoQ2hhcmFjdGVyLCB1bnNp
Z25lZCBpbmRleCA9IDApCit7CisgICAgaWYgKG1hdGNoQ2hhcmFjdGVyICYgfjB4RkYpCiAgICAg
ICAgIHJldHVybiBub3RGb3VuZDsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQotICAgICAgICBp
bmRleCA9IGxlbmd0aCAtIDE7Ci0gICAgd2hpbGUgKGNoYXJhY3RlcnNbaW5kZXhdICE9IG1hdGNo
Q2hhcmFjdGVyKSB7Ci0gICAgICAgIGlmICghaW5kZXgtLSkKLSAgICAgICAgICAgIHJldHVybiBu
b3RGb3VuZDsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OworICAgIHJldHVybiByZXZlcnNlRmlu
ZChjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0YXRpY19jYXN0PExDaGFyPihtYXRjaENoYXJhY3Rlciks
IGluZGV4KTsKIH0KIAogaW5saW5lIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKExDaGFyIGNoYXJh
Y3RlciwgdW5zaWduZWQgc3RhcnQpCg==
</data>
<flag name="review"
          id="181923"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="181924"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>