<?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>126020</bug_id>
          
          <creation_ts>2013-12-19 14:44:15 -0800</creation_ts>
          <short_desc>CStack Branch: Fix call eval in baseline JIT</short_desc>
          <delta_ts>2013-12-19 16:27: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>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>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>961547</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-19 14:44:15 -0800</bug_when>
    <thetext>Currently the baseline JIT doesn&apos;t handle eval calls due to the stack pointer not being set up for the callee.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961549</commentid>
    <comment_count>1</comment_count>
      <attachid>219684</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-19 14:52:34 -0800</bug_when>
    <thetext>Created attachment 219684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961563</commentid>
    <comment_count>2</comment_count>
      <attachid>219684</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-19 15:10:34 -0800</bug_when>
    <thetext>Comment on attachment 219684
Patch

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

r=me

&gt; Source/JavaScriptCore/jit/JITCall.cpp:126
&gt; +    addPtr(TrustedImm32(JSStack::CallerFrameAndPCSize * static_cast&lt;int&gt;(sizeof(Register))), regT1, stackPointerRegister);

Why do we need to move SP like this before the call to operationCallEval? I thought that calls to helper functions didn&apos;t need to adjust the stack.

&gt; Source/JavaScriptCore/jit/JITCall.cpp:130
&gt; +    addPtr(TrustedImm32(-frameRegisterCountFor(m_codeBlock) * sizeof(Register)), callFrameRegister, stackPointerRegister);

You should use stackPointerOffsetFor() here.

But same question here: why are we adjusting SP?

&gt; Source/JavaScriptCore/jit/JITCall.cpp:145
&gt; +    addPtr(TrustedImm32(JSStack::CallerFrameAndPCSize * static_cast&lt;int&gt;(sizeof(Register))), regT1, stackPointerRegister);

Why do we need to move SP like this before the call to operationCallEval?

&gt; Source/JavaScriptCore/jit/JITCall.cpp:147
&gt; +    addPtr(TrustedImm32(-frameRegisterCountFor(m_codeBlock) * sizeof(Register)), callFrameRegister, stackPointerRegister);

You should use stackPointerOffsetFor() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961564</commentid>
    <comment_count>3</comment_count>
      <attachid>219684</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-19 15:10:56 -0800</bug_when>
    <thetext>Comment on attachment 219684
Patch

r=me because this patch looks not incorrect, but I think it needs some refinement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961571</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-19 15:20:05 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 219684 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219684&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITCall.cpp:126
&gt; &gt; +    addPtr(TrustedImm32(JSStack::CallerFrameAndPCSize * static_cast&lt;int&gt;(sizeof(Register))), regT1, stackPointerRegister);
&gt; 
&gt; Why do we need to move SP like this before the call to operationCallEval? I thought that calls to helper functions didn&apos;t need to adjust the stack.

We need to move the stack down because that is where the calleeFrame is.  regT1 is the calleeFrame.  This is just like the normal call processing.
 
&gt; &gt; Source/JavaScriptCore/jit/JITCall.cpp:130
&gt; &gt; +    addPtr(TrustedImm32(-frameRegisterCountFor(m_codeBlock) * sizeof(Register)), callFrameRegister, stackPointerRegister);
&gt; 
&gt; You should use stackPointerOffsetFor() here.

I will make the change.

&gt; But same question here: why are we adjusting SP?

Same reason.

&gt; &gt; Source/JavaScriptCore/jit/JITCall.cpp:145
&gt; &gt; +    addPtr(TrustedImm32(JSStack::CallerFrameAndPCSize * static_cast&lt;int&gt;(sizeof(Register))), regT1, stackPointerRegister);
&gt; 
&gt; Why do we need to move SP like this before the call to operationCallEval?

Ditto.

&gt; &gt; Source/JavaScriptCore/jit/JITCall.cpp:147
&gt; &gt; +    addPtr(TrustedImm32(-frameRegisterCountFor(m_codeBlock) * sizeof(Register)), callFrameRegister, stackPointerRegister);
&gt; 
&gt; You should use stackPointerOffsetFor() here.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961587</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-19 15:34:30 -0800</bug_when>
    <thetext>Committed r160867: &lt;http://trac.webkit.org/changeset/160867&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961590</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-19 15:42:09 -0800</bug_when>
    <thetext>I see: operationCallEval is a helper function, which normally wouldn&apos;t adjust the stack for, but it calls back into the VM, so we do want to adjust the stack as if we were calling another JS function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961592</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-19 15:45:21 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I see: operationCallEval is a helper function, which normally wouldn&apos;t adjust the stack for, but it calls back into the VM, so we do want to adjust the stack as if we were calling another JS function.

Actually we have to adjust even if it didn&apos;t call back into the VM. Otherwise the locals in operationCallEval() and its callees will step on the callee frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961616</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-19 16:21:51 -0800</bug_when>
    <thetext>&gt; Actually we have to adjust even if it didn&apos;t call back into the VM. Otherwise the locals in operationCallEval() and its callees will step on the callee frame.

The adjustment moves SP up before calling operationCallEval(). How does that prevent anything from being stepped on? It seems to do the opposite, and expose two slots to be stepped on by operationCallEval()&apos;s ReturnPC and ReturnBP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961618</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-19 16:27:05 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Actually we have to adjust even if it didn&apos;t call back into the VM. Otherwise the locals in operationCallEval() and its callees will step on the callee frame.
&gt; 
&gt; The adjustment moves SP up before calling operationCallEval(). How does that prevent anything from being stepped on? It seems to do the opposite, and expose two slots to be stepped on by operationCallEval()&apos;s ReturnPC and ReturnBP.

My bad on the prior comment.  Your comment #7 is right.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219684</attachid>
            <date>2013-12-19 14:52:34 -0800</date>
            <delta_ts>2013-12-19 15:10:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>126020.patch</filename>
            <type>text/plain</type>
            <size>8478</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDEzLTEyLTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIENTdGFjayBCcmFuY2g6IEZpeCBjYWxsIGV2YWwgaW4gYmFzZWxpbmUgSklUCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYwMjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBjb2RlIHRvIHBy
b3Blcmx5IHNldCBhbmQgcmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBhcm91bmQgdGhlIGNhbGwg
dG8KKyAgICAgICAgb3BlcmF0aW9uQ2FsbEV2YWwuICBEdWUgdG8gdGhlIHN0YXRlIHRoZSBzdGFj
ayBpcyBpbiB3aGVuIHRoZSBleGNlcHRpb24gY2hlY2sKKyAgICAgICAgaW4gdGhlIGNhbGwgaXMg
ZG9uZSwgSSBjaGFuZ2VkIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbigpCisgICAgICAgIHRvIGJlIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKCkgYW5k
IGNoZWNrIGZvciBhbiBleGNlcHRpb24gYWZ0ZXIgdGhlCisgICAgICAgIGNhbGxlcidzIHN0YWNr
IGhhcyBiZWVuIHJlc3RvcmVkLiAgQ2hhbmdlZCBvcGVyYXRpb25DYWxsRXZhbCgpIHRvIHRha2Ug
YSBzZWNvbmQKKyAgICAgICAgYXJndW1lbnQgZm9yIHRoZSBleGVjQ2FsbGVlLCBnaXZlbiB0aGF0
IHdlIGFsd2F5cyBwYXNzIHRoZSBjYWxsZXIncyBleGVjIGFzIHRoZQorICAgICAgICBmaXJzdCBh
cmd1ZW1lbnQuCisKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBp
bGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SklUOjpjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayk6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisKIDIw
MTMtMTItMTggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBD
bGFyaWZpZWQgc3RhY2sgbWFpbnRhaW5lbmNlIGNvZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTYwODE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzE5LDYgKzcxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VQ
YywgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FWiwgaW50MzJfdCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihKX0pJ
VE9wZXJhdGlvbl9FKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2soSl9KSVRPcGVyYXRpb25fRUUsIFJlZ2lzdGVySUQpOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24oVl9KSVRPcGVyYXRpb25fRUNiLCBDb2RlQmxvY2sqKTsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhj
ZXB0aW9uKFpfSklUT3BlcmF0aW9uX0UpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE2MDgxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Myw5ICsxMjMsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgog
CiB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsK
LSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0
aW9uQ2FsbEV2YWwpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNTdGFjazo6Q2FsbGVyRnJh
bWVBbmRQQ1NpemUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDEs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25DYWxsRXZhbCwgcmVnVDEpOworICAgIC8vIFJlY2FsY3VsYXRlIG5ld0NhbGxG
cmFtZSBhbmQgcHV0IGluIHJlZ1QxIGZvciBwb3NzaWJsZSB1c2UgaW4gc2xvdyBjYXNlCisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJl
Z1QxKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1mcmFtZVJlZ2lzdGVyQ291bnRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBl
eGNlcHRpb25DaGVjaygpOyAvLyBEbyBleGNlcHRpb24gY2hlY2sgbm93IHRoYXQgdGhlIGNhbGxl
ciBzdGFjayBoYXMgYmVlbiByZXN0b3JlZAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSkpOwotICAg
IGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoY2FsbEZyYW1lUmVnaXN0
ZXIpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTEzNiw4
ICsxNDEsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydQogewog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
NjQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXI2NChKU1N0YWNrOjpDYWxsZWUsIHJlZ1QwLCByZWdUMSk7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGVtaXRO
YWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWZyYW1lUmVnaXN0ZXJDb3VudEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
c2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTIyNSw3ICsyMzMsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2KSwgcmVnVDEsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTU3RhY2s6OkNhbGxlckZy
YW1lQW5kUENTaXplICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSksIHJlZ1Qx
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFr
ZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCShyZXZpc2lvbiAxNjA4MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSwxMyBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb24pOwogfQogCitBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2soSl9KSVRPcGVyYXRpb25fRUUgb3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wKQor
eworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShyZWdPcCk7CisgICAgdXBkYXRlVG9w
Q2FsbEZyYW1lKCk7CisgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKK30KKwogQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihWX0pJVE9wZXJhdGlvbl9FQ2Igb3BlcmF0aW9uLCBD
b2RlQmxvY2sqIHBvaW50ZXIpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIocG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjA4MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTIsMTUgKzYx
MiwxMyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAgICAgZGly
ZWN0UHV0QnlWYWwoZXhlYywgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEV2YWwoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25DYWxsRXZhbChFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAg
ICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAg
ICBBU1NFUlQoZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmNvZGVUeXBl
KCkgIT0gRnVuY3Rpb25Db2RlCi0gICAgICAgIHx8ICFleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgp
LT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpCi0gICAgICAgIHx8IGV4ZWNDYWxs
ZWUtPmNhbGxlckZyYW1lKCktPnVuY2hlY2tlZFIoZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+
Y29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwor
ICAgIEFTU0VSVChleGVjLT5jb2RlQmxvY2soKS0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUK
KyAgICAgICAgfHwgIWV4ZWMtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkKKyAg
ICAgICAgfHwgZXhlYy0+dW5jaGVja2VkUihleGVjLT5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJl
Z2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CiAKLSAgICBleGVjQ2FsbGVlLT5zZXRTY29w
ZShjYWxsZXJGcmFtZS0+c2NvcGUoKSk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0UmV0dXJuUEMoc3Rh
dGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihPVVJfUkVUVVJOX0FERFJFU1MpKTsKKyAgICBleGVjQ2Fs
bGVlLT5zZXRTY29wZShleGVjLT5zY29wZSgpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxv
Y2soMCk7CiAKICAgICBpZiAoIWlzSG9zdEZ1bmN0aW9uKGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFs
dWUoKSwgZ2xvYmFsRnVuY0V2YWwpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE2MDgxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkoKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgU3RyaW5nSW1wbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
ICgqSl9KSVRPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlv
bl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwordHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUUpKEV4ZWNTdGF0ZSosIEV4ZWNT
dGF0ZSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVy
YXRpb25fRUkpKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7CkBAIC0y
MTIsNyArMjEzLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4ZQog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJp
YyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNhbGxFdmFsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ2FsbEV2YWwoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxs
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsK
</data>
<flag name="review"
          id="243340"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>