<?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>97237</bug_id>
          
          <creation_ts>2012-09-20 10:52:41 -0700</creation_ts>
          <short_desc>[WebSocket] Receiving a large message is really slow</short_desc>
          <delta_ts>2012-09-21 10:28:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter>evan.exe</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bashi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>724638</commentid>
    <comment_count>0</comment_count>
    <who name="">evan.exe</who>
    <bug_when>2012-09-20 10:52:41 -0700</bug_when>
    <thetext>It takes around 6 seconds for WebKit to receive single a 5 MB message over a WebSocket on localhost. It takes Firefox around 0.125 seconds in comparison. The test code is available at https://gist.github.com/3753757/.

I looked into it and from what I can tell, WebSocketChannel is receiving data from the socket in 1 KB increments and reallocating its entire buffer every time to store each new increment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724966</commentid>
    <comment_count>1</comment_count>
      <attachid>165008</attachid>
    <who name="">evan.exe</who>
    <bug_when>2012-09-20 16:35:56 -0700</bug_when>
    <thetext>Created attachment 165008
Vector&lt;char&gt; instead of char array in WebSocketChannel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725597</commentid>
    <comment_count>2</comment_count>
      <attachid>165008</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-09-21 10:00:31 -0700</bug_when>
    <thetext>Comment on attachment 165008
Vector&lt;char&gt; instead of char array in WebSocketChannel

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

Looks great to me. Marking r+ for now, will cq+ once EWS reports success.

In the future, please do mark patches r? and cq? as appropriate, so that they are visible in review queue.

&gt; Source/WebCore/Modules/websockets/WebSocketChannel.cpp:394
&gt; +        LOG(Network, &quot;WebSocket buffer overflow (%lu+%lu)&quot;, static_cast&lt;unsigned long&gt;(m_buffer.size()), static_cast&lt;unsigned long&gt;(len));

Not related to this patch at all, but: this is a runtime condition, and should be logged to developer console, not to a debug channel.

&gt; Source/WebCore/Modules/websockets/WebSocketChannel.cpp:405
&gt; +    memmove(m_buffer.data(), m_buffer.data() + len, m_buffer.size() - len);
&gt; +    m_buffer.resize(m_buffer.size() - len);

This looks suspicious. We are still doing lots of unnecessary copying.

You could have used Vector::remove() here - not that it would have improved performance characteristics, but it would be one line instead of three.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725622</commentid>
    <comment_count>3</comment_count>
      <attachid>165008</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-21 10:28:02 -0700</bug_when>
    <thetext>Comment on attachment 165008
Vector&lt;char&gt; instead of char array in WebSocketChannel

Clearing flags on attachment: 165008

Committed r129239: &lt;http://trac.webkit.org/changeset/129239&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725623</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-21 10:28:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165008</attachid>
            <date>2012-09-20 16:35:56 -0700</date>
            <delta_ts>2012-09-21 10:28:02 -0700</delta_ts>
            <desc>Vector&lt;char&gt; instead of char array in WebSocketChannel</desc>
            <filename>websocket.patch</filename>
            <type>text/plain</type>
            <size>12349</size>
            <attacher>evan.exe</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyOTE3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA5LTIwICBFdmFuIFdh
bGxhY2UgIDxldmFuLmV4ZUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dlYlNvY2tldF0gUmVjZWl2
aW5nIGEgbGFyZ2UgbWVzc2FnZSBpcyByZWFsbHkgc2xvdworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyMzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJTb2NrZXRDaGFubmVsIGFsd2F5cyByZWFsbG9j
YXRlcyBpdHMgaW50ZXJuYWwgYnVmZmVyIHdoZW4gaXQgcmVjZWl2ZXMKKyAgICAgICAgYW5kIGFw
cGVuZHMgbmV3IGRhdGEgd2hpY2ggY2F1c2VzIGRyYW1hdGljIHNsb3dkb3ducyBmb3IgbWVzc2Fn
ZXMgb3ZlcgorICAgICAgICAyIE1CIGluIHNpemUuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgaW50
ZXJuYWwgYnVmZmVyIG9mIFdlYlNvY2tldENoYW5uZWwKKyAgICAgICAgZnJvbSBhIHJhdyBjaGFy
IGFycmF5IHRvIGEgVmVjdG9yPGNoYXI+IGFuZCB1c2VzIGl0cyBhbW9ydGl6ZWQgYXBwZW5kKCkK
KyAgICAgICAgbWV0aG9kLiBUaGlzIGJyaW5ncyB0aGUgdGltZSB0byByZWNlaXZlIGEgNSBNQiBt
ZXNzYWdlIGZyb20gNS4yIHNlY29uZHMKKyAgICAgICAgdG8gMC4yNSBzZWNvbmRzLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggaXMgb25seSBmb3Igb3B0aW1pemF0aW9uLiBObyBuZXcgdGVzdHMgYXJl
IG5lZWRlZC4KKworICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OldlYlNvY2tldENoYW5u
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6fldlYlNvY2tldENoYW5u
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6ZmFpbCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViU29ja2V0Q2hhbm5lbDo6ZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6YXBwZW5kVG9CdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6c2tpcEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldENoYW5uZWw6OnJlc3VtZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29j
a2V0Q2hhbm5lbDo6cHJvY2Vzc0ZyYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0Q2hhbm5lbC5oOgorCiAyMDEyLTA5LTIwICBNaWtlIFdlc3QgIDxta3dzdEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgQ1NQIHJlcG9ydHMgc2hvdWxkIHNlbmQgYW4gZW1wdHkgImJs
b2NrZWQtdXJpIiByYXRoZXIgdGhhbiBub3RoaW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkocmV2aXNp
b24gMTI5MTA3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw2IEBAIGNvbnN0IGRvdWJs
ZSBUQ1BNYXhpbXVtU2VnbWVudExpZmV0aW1lID0KIFdlYlNvY2tldENoYW5uZWw6OldlYlNvY2tl
dENoYW5uZWwoRG9jdW1lbnQqIGRvY3VtZW50LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiBjbGll
bnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9jbGllbnQoY2xpZW50KQot
ICAgICwgbV9idWZmZXIoMCkKLSAgICAsIG1fYnVmZmVyU2l6ZSgwKQogICAgICwgbV9yZXN1bWVU
aW1lcih0aGlzLCAmV2ViU29ja2V0Q2hhbm5lbDo6cmVzdW1lVGltZXJGaXJlZCkKICAgICAsIG1f
c3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV9jbG9zaW5nKGZhbHNlKQpAQCAtOTcsNyArOTUsNiBA
QCBXZWJTb2NrZXRDaGFubmVsOjpXZWJTb2NrZXRDaGFubmVsKERvY3VtCiAKIFdlYlNvY2tldENo
YW5uZWw6On5XZWJTb2NrZXRDaGFubmVsKCkKIHsKLSAgICBmYXN0RnJlZShtX2J1ZmZlcik7CiB9
CiAKIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wpCkBAIC0yMDYsOCArMjAzLDggQEAgdm9pZCBXZWJTb2NrZXRDaGFu
bmVsOjpmYWlsKGNvbnN0IFN0cmluZwogICAgIC8vIG9uY2UgdGhlIFdlYlNvY2tldCBjb25uZWN0
aW9uIGlzIGZhaWxlZCAoc2VjdGlvbiA3LjEuNykuCiAgICAgUmVmUHRyPFdlYlNvY2tldENoYW5u
ZWw+IHByb3RlY3QodGhpcyk7IC8vIFRoZSBjbGllbnQgY2FuIGNsb3NlIHRoZSBjaGFubmVsLCBw
b3RlbnRpYWxseSByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UuCiAgICAgbV9zaG91bGREaXNj
YXJkUmVjZWl2ZWREYXRhID0gdHJ1ZTsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIHNraXBC
dWZmZXIobV9idWZmZXJTaXplKTsgLy8gU2F2ZSBtZW1vcnkuCisgICAgaWYgKCFtX2J1ZmZlci5p
c0VtcHR5KCkpCisgICAgICAgIHNraXBCdWZmZXIobV9idWZmZXIuc2l6ZSgpKTsgLy8gU2F2ZSBt
ZW1vcnkuCiAgICAgbV9kZWZsYXRlRnJhbWVyLmRpZEZhaWwoKTsKICAgICBtX2hhc0NvbnRpbnVv
dXNGcmFtZSA9IGZhbHNlOwogICAgIG1fY29udGludW91c0ZyYW1lRGF0YS5jbGVhcigpOwpAQCAt
MjM4LDcgKzIzNSw3IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6c3VzcGVuZCgpCiB2b2lkIFdl
YlNvY2tldENoYW5uZWw6OnJlc3VtZSgpCiB7CiAgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKLSAg
ICBpZiAoKG1fYnVmZmVyIHx8IG1fY2xvc2VkKSAmJiBtX2NsaWVudCAmJiAhbV9yZXN1bWVUaW1l
ci5pc0FjdGl2ZSgpKQorICAgIGlmICgoIW1fYnVmZmVyLmlzRW1wdHkoKSB8fCBtX2Nsb3NlZCkg
JiYgbV9jbGllbnQgJiYgIW1fcmVzdW1lVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9yZXN1
bWVUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKQEAgLTMxMiw3ICszMDksNyBAQCB2b2lkIFdl
YlNvY2tldENoYW5uZWw6OmRpZFJlY2VpdmVTb2NrZXRTCiAgICAgICAgIGZhaWwoIlJhbiBvdXQg
b2YgbWVtb3J5IHdoaWxlIHJlY2VpdmluZyBXZWJTb2NrZXQgZGF0YS4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICB3aGlsZSAoIW1fc3VzcGVuZGVkICYmIG1fY2xpZW50ICYmIG1fYnVm
ZmVyKQorICAgIHdoaWxlICghbV9zdXNwZW5kZWQgJiYgbV9jbGllbnQgJiYgIW1fYnVmZmVyLmlz
RW1wdHkoKSkKICAgICAgICAgaWYgKCFwcm9jZXNzQnVmZmVyKCkpCiAgICAgICAgICAgICBicmVh
azsKIH0KQEAgLTM5Miw1NSArMzg5LDQxIEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZGlkRmFp
bChpbnQgZXJyb3IKIAogYm9vbCBXZWJTb2NrZXRDaGFubmVsOjphcHBlbmRUb0J1ZmZlcihjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogewotICAgIHNpemVfdCBuZXdCdWZmZXJTaXplID0g
bV9idWZmZXJTaXplICsgbGVuOwotICAgIGlmIChuZXdCdWZmZXJTaXplIDwgbV9idWZmZXJTaXpl
KSB7Ci0gICAgICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0IGJ1ZmZlciBvdmVyZmxvdyAoJWx1
KyVsdSkiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX2J1ZmZlclNpemUpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPihsZW4pKTsKKyAgICBzaXplX3QgbmV3QnVmZmVyU2l6ZSA9IG1f
YnVmZmVyLnNpemUoKSArIGxlbjsKKyAgICBpZiAobmV3QnVmZmVyU2l6ZSA8IG1fYnVmZmVyLnNp
emUoKSkgeworICAgICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldCBidWZmZXIgb3ZlcmZsb3cg
KCVsdSslbHUpIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9idWZmZXIuc2l6ZSgpKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obGVuKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgY2hhciogbmV3QnVmZmVyID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2Mo
bmV3QnVmZmVyU2l6ZSkuZ2V0VmFsdWUobmV3QnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBtZW1jcHkobmV3QnVmZmVyLCBtX2J1ZmZl
ciwgbV9idWZmZXJTaXplKTsKLSAgICBtZW1jcHkobmV3QnVmZmVyICsgbV9idWZmZXJTaXplLCBk
YXRhLCBsZW4pOwotICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKLSAgICBtX2J1ZmZlciA9IG5ld0J1
ZmZlcjsKLSAgICBtX2J1ZmZlclNpemUgPSBuZXdCdWZmZXJTaXplOworICAgIG1fYnVmZmVyLmFw
cGVuZChkYXRhLCBsZW4pOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYlNvY2tldENo
YW5uZWw6OnNraXBCdWZmZXIoc2l6ZV90IGxlbikKIHsKLSAgICBBU1NFUlQobGVuIDw9IG1fYnVm
ZmVyU2l6ZSk7Ci0gICAgbV9idWZmZXJTaXplIC09IGxlbjsKLSAgICBpZiAoIW1fYnVmZmVyU2l6
ZSkgewotICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Ci0gICAgICAgIG1fYnVmZmVyID0gMDsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtZW1tb3ZlKG1fYnVmZmVyLCBtX2J1ZmZlciAr
IGxlbiwgbV9idWZmZXJTaXplKTsKKyAgICBBU1NFUlQobGVuIDw9IG1fYnVmZmVyLnNpemUoKSk7
CisgICAgbWVtbW92ZShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLmRhdGEoKSArIGxlbiwgbV9i
dWZmZXIuc2l6ZSgpIC0gbGVuKTsKKyAgICBtX2J1ZmZlci5yZXNpemUobV9idWZmZXIuc2l6ZSgp
IC0gbGVuKTsKIH0KIAogYm9vbCBXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKCkKIHsK
ICAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKICAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIEFT
U0VSVChtX2J1ZmZlcik7Ci0gICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVwIHBy
b2Nlc3NCdWZmZXIgJWx1IiwgdGhpcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9idWZm
ZXJTaXplKSk7CisgICAgQVNTRVJUKCFtX2J1ZmZlci5pc0VtcHR5KCkpOworICAgIExPRyhOZXR3
b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBwcm9jZXNzQnVmZmVyICVsdSIsIHRoaXMsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fYnVmZmVyLnNpemUoKSkpOwogCiAgICAgaWYgKG1fc2hv
dWxkRGlzY2FyZFJlY2VpdmVkRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KG1fcmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlKSB7Ci0gICAgICAgIHNraXBCdWZmZXIobV9idWZm
ZXJTaXplKTsKKyAgICAgICAgc2tpcEJ1ZmZlcihtX2J1ZmZlci5zaXplKCkpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUmVmUHRyPFdlYlNvY2tldENoYW5uZWw+IHByb3Rl
Y3QodGhpcyk7IC8vIFRoZSBjbGllbnQgY2FuIGNsb3NlIHRoZSBjaGFubmVsLCBwb3RlbnRpYWxs
eSByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UuCiAKICAgICBpZiAobV9oYW5kc2hha2UtPm1v
ZGUoKSA9PSBXZWJTb2NrZXRIYW5kc2hha2U6OkluY29tcGxldGUpIHsKLSAgICAgICAgaW50IGhl
YWRlckxlbmd0aCA9IG1faGFuZHNoYWtlLT5yZWFkU2VydmVySGFuZHNoYWtlKG1fYnVmZmVyLCBt
X2J1ZmZlclNpemUpOworICAgICAgICBpbnQgaGVhZGVyTGVuZ3RoID0gbV9oYW5kc2hha2UtPnJl
YWRTZXJ2ZXJIYW5kc2hha2UobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCkpOwogICAg
ICAgICBpZiAoaGVhZGVyTGVuZ3RoIDw9IDApCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGlmIChtX2hhbmRzaGFrZS0+bW9kZSgpID09IFdlYlNvY2tldEhhbmRzaGFrZTo6Q29u
bmVjdGVkKSB7CkBAIC00NTYsOCArNDM5LDggQEAgYm9vbCBXZWJTb2NrZXRDaGFubmVsOjpwcm9j
ZXNzQnVmZmVyKCkKICAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAl
cCBjb25uZWN0ZWQiLCB0aGlzKTsKICAgICAgICAgICAgIHNraXBCdWZmZXIoaGVhZGVyTGVuZ3Ro
KTsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRDb25uZWN0KCk7Ci0gICAgICAgICAgICBMT0co
TmV0d29yaywgInJlbWFpbmluZyBpbiByZWFkIGJ1ZiAlbHUiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihtX2J1ZmZlclNpemUpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAg
ICAgICAgICAgIExPRyhOZXR3b3JrLCAicmVtYWluaW5nIGluIHJlYWQgYnVmICVsdSIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fYnVmZmVyLnNpemUoKSkpOworICAgICAgICAgICAgcmV0
dXJuICFtX2J1ZmZlci5pc0VtcHR5KCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG1faGFu
ZHNoYWtlLT5tb2RlKCkgPT0gV2ViU29ja2V0SGFuZHNoYWtlOjpGYWlsZWQpOwogICAgICAgICBM
T0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgY29ubmVjdGlvbiBmYWlsZWQiLCB0aGlz
KTsKQEAgLTQ3Nyw3ICs0NjAsNyBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OnJlc3VtZVRpbWVy
RmlyZWQoCiAgICAgQVNTRVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1fcmVzdW1lVGltZXIp
OwogCiAgICAgUmVmUHRyPFdlYlNvY2tldENoYW5uZWw+IHByb3RlY3QodGhpcyk7IC8vIFRoZSBj
bGllbnQgY2FuIGNsb3NlIHRoZSBjaGFubmVsLCBwb3RlbnRpYWxseSByZW1vdmluZyB0aGUgbGFz
dCByZWZlcmVuY2UuCi0gICAgd2hpbGUgKCFtX3N1c3BlbmRlZCAmJiBtX2NsaWVudCAmJiBtX2J1
ZmZlcikKKyAgICB3aGlsZSAoIW1fc3VzcGVuZGVkICYmIG1fY2xpZW50ICYmICFtX2J1ZmZlci5p
c0VtcHR5KCkpCiAgICAgICAgIGlmICghcHJvY2Vzc0J1ZmZlcigpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiBtX2NsaWVudCAmJiBtX2Nsb3NlZCAmJiBtX2hh
bmRsZSkKQEAgLTUxNywxMiArNTAwLDEyIEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6Y2xvc2lu
Z1RpbWVyRmlyZWQKIAogYm9vbCBXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzRnJhbWUoKQogewot
ICAgIEFTU0VSVChtX2J1ZmZlcik7CisgICAgQVNTRVJUKCFtX2J1ZmZlci5pc0VtcHR5KCkpOwog
CiAgICAgV2ViU29ja2V0RnJhbWUgZnJhbWU7CiAgICAgY29uc3QgY2hhciogZnJhbWVFbmQ7CiAg
ICAgU3RyaW5nIGVycm9yU3RyaW5nOwotICAgIFdlYlNvY2tldEZyYW1lOjpQYXJzZUZyYW1lUmVz
dWx0IHJlc3VsdCA9IFdlYlNvY2tldEZyYW1lOjpwYXJzZUZyYW1lKG1fYnVmZmVyLCBtX2J1ZmZl
clNpemUsIGZyYW1lLCBmcmFtZUVuZCwgZXJyb3JTdHJpbmcpOworICAgIFdlYlNvY2tldEZyYW1l
OjpQYXJzZUZyYW1lUmVzdWx0IHJlc3VsdCA9IFdlYlNvY2tldEZyYW1lOjpwYXJzZUZyYW1lKG1f
YnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLCBmcmFtZSwgZnJhbWVFbmQsIGVycm9yU3Ry
aW5nKTsKICAgICBpZiAocmVzdWx0ID09IFdlYlNvY2tldEZyYW1lOjpGcmFtZUluY29tcGxldGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAocmVzdWx0ID09IFdlYlNvY2tldEZyYW1l
OjpGcmFtZUVycm9yKSB7CkBAIC01MzAsOCArNTEzLDggQEAgYm9vbCBXZWJTb2NrZXRDaGFubmVs
Ojpwcm9jZXNzRnJhbWUoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQVNT
RVJUKG1fYnVmZmVyIDwgZnJhbWVFbmQpOwotICAgIEFTU0VSVChmcmFtZUVuZCA8PSBtX2J1ZmZl
ciArIG1fYnVmZmVyU2l6ZSk7CisgICAgQVNTRVJUKG1fYnVmZmVyLmRhdGEoKSA8IGZyYW1lRW5k
KTsKKyAgICBBU1NFUlQoZnJhbWVFbmQgPD0gbV9idWZmZXIuZGF0YSgpICsgbV9idWZmZXIuc2l6
ZSgpKTsKIAogICAgIE93blB0cjxJbmZsYXRlUmVzdWx0SG9sZGVyPiBpbmZsYXRlUmVzdWx0ID0g
bV9kZWZsYXRlRnJhbWVyLmluZmxhdGUoZnJhbWUpOwogICAgIGlmICghaW5mbGF0ZVJlc3VsdC0+
c3VjY2VlZGVkKCkpIHsKQEAgLTU4NSw3ICs1NjgsNyBAQCBib29sIFdlYlNvY2tldENoYW5uZWw6
OnByb2Nlc3NGcmFtZSgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgbV9jb250aW51b3VzRnJhbWVEYXRhLmFwcGVuZChmcmFtZS5wYXlsb2FkLCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKTsKLSAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyKTsK
KyAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyLmRhdGEoKSk7CiAgICAgICAg
IGlmIChmcmFtZS5maW5hbCkgewogICAgICAgICAgICAgLy8gb25tZXNzYWdlIGhhbmRsZXIgbWF5
IGV2ZW50dWFsbHkgY2FsbCB0aGUgb3RoZXIgbWV0aG9kcyBvZiB0aGlzIGNoYW5uZWwsCiAgICAg
ICAgICAgICAvLyBzbyB3ZSBzaG91bGQgcHJldGVuZCB0aGF0IHdlIGhhdmUgZmluaXNoZWQgdG8g
cmVhZCB0aGlzIGZyYW1lIGFuZApAQCAtNjE3LDcgKzYwMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hh
bm5lbDo6cHJvY2Vzc0ZyYW1lKCkKICAgICAgICAgICAgICAgICBtZXNzYWdlID0gU3RyaW5nOjpm
cm9tVVRGOChmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBtZXNzYWdlID0gIiI7Ci0gICAgICAgICAgICBza2lwQnVm
ZmVyKGZyYW1lRW5kIC0gbV9idWZmZXIpOworICAgICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVu
ZCAtIG1fYnVmZmVyLmRhdGEoKSk7CiAgICAgICAgICAgICBpZiAobWVzc2FnZS5pc051bGwoKSkK
ICAgICAgICAgICAgICAgICBmYWlsKCJDb3VsZCBub3QgZGVjb2RlIGEgdGV4dCBmcmFtZSBhcyBV
VEYtOC4iKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTYyNyw3ICs2MTAsNyBAQCBib29sIFdlYlNv
Y2tldENoYW5uZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFt
ZU9wQ29kZSA9IFdlYlNvY2tldEZyYW1lOjpPcENvZGVUZXh0OwogICAgICAgICAgICAgQVNTRVJU
KG1fY29udGludW91c0ZyYW1lRGF0YS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgbV9jb250aW51
b3VzRnJhbWVEYXRhLmFwcGVuZChmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsK
LSAgICAgICAgICAgIHNraXBCdWZmZXIoZnJhbWVFbmQgLSBtX2J1ZmZlcik7CisgICAgICAgICAg
ICBza2lwQnVmZmVyKGZyYW1lRW5kIC0gbV9idWZmZXIuZGF0YSgpKTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKIApAQCAtNjM1LDE0ICs2MTgsMTQgQEAgYm9vbCBXZWJTb2NrZXRDaGFubmVs
Ojpwcm9jZXNzRnJhbWUoKQogICAgICAgICBpZiAoZnJhbWUuZmluYWwpIHsKICAgICAgICAgICAg
IE93blB0cjxWZWN0b3I8Y2hhcj4gPiBiaW5hcnlEYXRhID0gYWRvcHRQdHIobmV3IFZlY3Rvcjxj
aGFyPihmcmFtZS5wYXlsb2FkTGVuZ3RoKSk7CiAgICAgICAgICAgICBtZW1jcHkoYmluYXJ5RGF0
YS0+ZGF0YSgpLCBmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKLSAgICAgICAg
ICAgIHNraXBCdWZmZXIoZnJhbWVFbmQgLSBtX2J1ZmZlcik7CisgICAgICAgICAgICBza2lwQnVm
ZmVyKGZyYW1lRW5kIC0gbV9idWZmZXIuZGF0YSgpKTsKICAgICAgICAgICAgIG1fY2xpZW50LT5k
aWRSZWNlaXZlQmluYXJ5RGF0YShiaW5hcnlEYXRhLnJlbGVhc2UoKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBtX2hhc0NvbnRpbnVvdXNGcmFtZSA9IHRydWU7CiAgICAgICAgICAg
ICBtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZSA9IFdlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnk7
CiAgICAgICAgICAgICBBU1NFUlQobV9jb250aW51b3VzRnJhbWVEYXRhLmlzRW1wdHkoKSk7CiAg
ICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZURhdGEuYXBwZW5kKGZyYW1lLnBheWxvYWQsIGZy
YW1lLnBheWxvYWRMZW5ndGgpOwotICAgICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1f
YnVmZmVyKTsKKyAgICAgICAgICAgIHNraXBCdWZmZXIoZnJhbWVFbmQgLSBtX2J1ZmZlci5kYXRh
KCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC02NjcsNyArNjUwLDcgQEAgYm9v
bCBXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzRnJhbWUoKQogICAgICAgICAgICAgbV9jbG9zZUV2
ZW50UmVhc29uID0gU3RyaW5nOjpmcm9tVVRGOCgmZnJhbWUucGF5bG9hZFsyXSwgZnJhbWUucGF5
bG9hZExlbmd0aCAtIDIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Nsb3NlRXZlbnRS
ZWFzb24gPSAiIjsKLSAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAg
ICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyLmRhdGEoKSk7CiAgICAgICAgIG1f
cmVjZWl2ZWRDbG9zaW5nSGFuZHNoYWtlID0gdHJ1ZTsKICAgICAgICAgc3RhcnRDbG9zaW5nSGFu
ZHNoYWtlKG1fY2xvc2VFdmVudENvZGUsIG1fY2xvc2VFdmVudFJlYXNvbik7CiAgICAgICAgIGlm
IChtX2Nsb3NpbmcpIHsKQEAgLTY3OCwyMiArNjYxLDIyIEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5l
bDo6cHJvY2Vzc0ZyYW1lKCkKIAogICAgIGNhc2UgV2ViU29ja2V0RnJhbWU6Ok9wQ29kZVBpbmc6
CiAgICAgICAgIGVucXVldWVSYXdGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlUG9uZywgZnJh
bWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCk7Ci0gICAgICAgIHNraXBCdWZmZXIoZnJh
bWVFbmQgLSBtX2J1ZmZlcik7CisgICAgICAgIHNraXBCdWZmZXIoZnJhbWVFbmQgLSBtX2J1ZmZl
ci5kYXRhKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV2ViU29ja2V0RnJhbWU6Ok9w
Q29kZVBvbmc6CiAgICAgICAgIC8vIEEgc2VydmVyIG1heSBzZW5kIGEgcG9uZyBpbiByZXNwb25z
ZSB0byBvdXIgcGluZywgb3IgYW4gdW5zb2xpY2l0ZWQgcG9uZyB3aGljaCBpcyBub3QgYXNzb2Np
YXRlZCB3aXRoCiAgICAgICAgIC8vIGFueSBzcGVjaWZpYyBwaW5nLiBFaXRoZXIgd2F5LCB0aGVy
ZSdzIG5vdGhpbmcgdG8gZG8gb24gcmVjZWlwdCBvZiBwb25nLgotICAgICAgICBza2lwQnVmZmVy
KGZyYW1lRW5kIC0gbV9idWZmZXIpOworICAgICAgICBza2lwQnVmZmVyKGZyYW1lRW5kIC0gbV9i
dWZmZXIuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVm
ZmVyKTsKKyAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyLmRhdGEoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICByZXR1cm4g
IW1fYnVmZmVyLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBXZWJTb2NrZXRDaGFubmVsOjplbnF1ZXVl
VGV4dEZyYW1lKGNvbnN0IENTdHJpbmcmIHN0cmluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaAkocmV2aXNpb24g
MTI5MTA3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENo
YW5uZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDggKzE5NSw3IEBAIHByaXZhdGU6CiAgICAg
V2ViU29ja2V0Q2hhbm5lbENsaWVudCogbV9jbGllbnQ7CiAgICAgT3duUHRyPFdlYlNvY2tldEhh
bmRzaGFrZT4gbV9oYW5kc2hha2U7CiAgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gbV9o
YW5kbGU7Ci0gICAgY2hhciogbV9idWZmZXI7Ci0gICAgc2l6ZV90IG1fYnVmZmVyU2l6ZTsKKyAg
ICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7CiAKICAgICBUaW1lcjxXZWJTb2NrZXRDaGFubmVsPiBt
X3Jlc3VtZVRpbWVyOwogICAgIGJvb2wgbV9zdXNwZW5kZWQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>