<?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>154346</bug_id>
          
          <creation_ts>2016-02-17 11:15:09 -0800</creation_ts>
          <short_desc>Callers of JSString::value() should check for exceptions thereafter.</short_desc>
          <delta_ts>2016-02-17 22:30:38 -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>WebKit Local 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>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165635</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-17 11:15:09 -0800</bug_when>
    <thetext>Applying the fix in https://bugs.webkit.org/show_bug.cgi?id=154340 project wide for straightforward cases.

JSString::value() can throw an exception if the JS string is a rope and value() needs to resolve the rope but encounters an OutOfMemory error.  If value() is not able to resolve the rope, it will return a null string (in addition to throwing the exception).  If a caller does not check for exceptions after calling JSString::value(), they may eventually use the returned null string and crash the VM.

The fix is to add all the necessary exception checks, and do the appropriate handling if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165650</commentid>
    <comment_count>1</comment_count>
      <attachid>271569</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-17 11:31:29 -0800</bug_when>
    <thetext>Created attachment 271569
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165652</commentid>
    <comment_count>2</comment_count>
      <attachid>271571</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-17 11:35:39 -0800</bug_when>
    <thetext>Created attachment 271571
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165661</commentid>
    <comment_count>3</comment_count>
      <attachid>271571</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-17 12:03:07 -0800</bug_when>
    <thetext>Comment on attachment 271571
proposed patch.

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

&gt; Source/WebCore/bindings/js/JSStorageCustom.cpp:120
&gt; -        return true;
&gt; +        return false;

Why did you change this? If there&apos;s a reason, you need a test for it. If there isn&apos;t a reason, you shouldn&apos;t change this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165663</commentid>
    <comment_count>4</comment_count>
      <attachid>271571</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-17 12:06:55 -0800</bug_when>
    <thetext>Comment on attachment 271571
proposed patch.

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

&gt;&gt; Source/WebCore/bindings/js/JSStorageCustom.cpp:120
&gt;&gt; +        return false;
&gt; 
&gt; Why did you change this? If there&apos;s a reason, you need a test for it. If there isn&apos;t a reason, you shouldn&apos;t change this.

I explained this in the WebCore ChangeLog: &quot;Changed the return value to false if we return early due to an exception.  This is because the put operation hasn&apos;t actually taken place yet.&quot;

It&apos;s not easy to write a test for this change just like it is not easy to write a test for all the other changes in this patch: &quot;The crash that results from this issue is dependent on a race condition where an OutOfMemory error occurs precisely at the point where the JSString::value() function is called on a rope JSString.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165909</commentid>
    <comment_count>5</comment_count>
      <attachid>271571</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-17 21:58:30 -0800</bug_when>
    <thetext>Comment on attachment 271571
proposed patch.

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

&gt;&gt;&gt; Source/WebCore/bindings/js/JSStorageCustom.cpp:120
&gt;&gt;&gt; +        return false;
&gt;&gt; 
&gt;&gt; Why did you change this? If there&apos;s a reason, you need a test for it. If there isn&apos;t a reason, you shouldn&apos;t change this.
&gt; 
&gt; I explained this in the WebCore ChangeLog: &quot;Changed the return value to false if we return early due to an exception.  This is because the put operation hasn&apos;t actually taken place yet.&quot;
&gt; 
&gt; It&apos;s not easy to write a test for this change just like it is not easy to write a test for all the other changes in this patch: &quot;The crash that results from this issue is dependent on a race condition where an OutOfMemory error occurs precisely at the point where the JSString::value() function is called on a rope JSString.&quot;

OK, as requested, I&apos;ve looked into making a test for this.  It turns out, I was wrong and the code was correct to begin with (and should return true, not false).  That&apos;s because the boolean is not meant to communicate whether putDelegate() is successful at putting the value or not.  Instead, it is meant to communicate to its caller JSStorage::put() that the put operation should be handled by putDelegate() (even though it failed in this case due to an OutOfMemory exception), and that JSStorage::put() should not execute its superclass put to do the operation instead.  False would, therefore, be the wrong value to return here since it has been determined by this point that the put operation should be handled by the delegate.

Some interesting tidbits to note from my attempt at writing a test for triggering this exception: on OSX, my test was creating a rope nearly 2G in length.  During rope creation, the jsString() function (called by jsAdd() in Operations.h) ensures that the length of the rope does not exceeds INT_MAX i.e. around 2G.  Hence, it is not possible to create a rope of length greater than INT_MAX.  Meanwhile, StringImpl allocation is able to allocate a buffer up to near (UINT_MAX i.e. about 4G) for the resolved rope ... that is if tryFastMalloc() succeeds in making the allocation.  On OSX, tryFastMalloc() is indeed able to do this allocation.  Hence, I can&apos;t actually get the test to throw an OutOfMemory exception here, except by instrumenting StringImpl::tryCreateUninitialized() to cap its allocation at 1G.  On iOS, tryFastMalloc() will fail, and we will get the OutOfMemory exception.  Barring the addition of permanent debugging instrumentation into bmalloc or StringImpl::tryCreateUninitialized() to force this allocation failure, my test is not actually very useful. 

Anyway, I&apos;ll revert this change to return true, and add a comment on its meaning so that no one else comes along later and repeat the same misunderstanding.  I&apos;ll land the patch with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165937</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-17 22:30:38 -0800</bug_when>
    <thetext>Landed in r196745: &lt;http://trac.webkit.org/r196745&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271569</attachid>
            <date>2016-02-17 11:31:29 -0800</date>
            <delta_ts>2016-02-17 11:35:39 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-154346.patch</filename>
            <type>text/plain</type>
            <size>10246</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDE2LTAyLTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
YWxsZXJzIG9mIEpTU3RyaW5nOjp2YWx1ZSgpIHNob3VsZCBjaGVjayBmb3IgZXhjZXB0aW9ucyB0
aGVyZWFmdGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU0MzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSlNTdHJpbmc6OnZhbHVlKCkgY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgSlMgc3Ry
aW5nIGlzIGEgcm9wZSBhbmQgdmFsdWUoKSAKKyAgICAgICAgbmVlZHMgdG8gcmVzb2x2ZSB0aGUg
cm9wZSBidXQgZW5jb3VudGVycyBhbiBPdXRPZk1lbW9yeSBlcnJvci4gIElmIHZhbHVlKCkgaXMg
bm90CisgICAgICAgIGFibGUgdG8gcmVzb2x2ZSB0aGUgcm9wZSwgaXQgd2lsbCByZXR1cm4gYSBu
dWxsIHN0cmluZyAoaW4gYWRkaXRpb24gdG8gdGhyb3dpbmcKKyAgICAgICAgdGhlIGV4Y2VwdGlv
bikuICBJZiBhIGNhbGxlciBkb2VzIG5vdCBjaGVjayBmb3IgZXhjZXB0aW9ucyBhZnRlciBjYWxs
aW5nCisgICAgICAgIEpTU3RyaW5nOjp2YWx1ZSgpLCB0aGV5IG1heSBldmVudHVhbGx5IHVzZSB0
aGUgcmV0dXJuZWQgbnVsbCBzdHJpbmcgYW5kIGNyYXNoIHRoZQorICAgICAgICBWTS4KKworICAg
ICAgICBUaGUgZml4IGlzIHRvIGFkZCBhbGwgdGhlIG5lY2Vzc2FyeSBleGNlcHRpb24gY2hlY2tz
LCBhbmQgZG8gdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIGhhbmRsaW5nIGlmIG5lZWRlZC4KKwor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAgIChmdW5j
dGlvbkxvYWQpOgorICAgICAgICAoZnVuY3Rpb25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlv
bkNoZWNrU3ludGF4KToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KToKKyAgICAg
ICAgKGZ1bmN0aW9uTG9hZE1vZHVsZSk6CisgICAgICAgIChmdW5jdGlvbkNoZWNrTW9kdWxlU3lu
dGF4KToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmRhdGVQYXJzZSk6CisgICAgICAgIChKU0M6OmRhdGVOb3cpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
RXZhbCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uUHJpbnQpOgorCiAyMDE2LTAyLTE3ICBHYXZpbiBCYXJyYWNsb3VnaCAg
PGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0RPTVdpbmRvdzo6cHV0IHNob3Vs
ZCBub3QgZG8gdGhlIHNhbWUgdGhpbmcgdHdpY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShy
ZXZpc2lvbiAxOTY2MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI0Myw2ICsxMjQzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblZlcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxl
U3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwpAQCAtMTI3Miw2ICsxMjc0LDggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bgogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFN0cmlu
ZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBp
ZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4i
KSkpKTsKQEAgLTEyODgsNiArMTI5Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Mb2EKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkRmls
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50
c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKQEAgLTEyOTgsNiArMTMwNCw4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWEKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0
OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3Jp
cHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3Bl
biBmaWxlLiIpKSkpOwpAQCAtMTU2NSw2ICsxNTczLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbklzMwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxvYWRXZWJBc3NlbWJseShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RyaW5nIGZpbGVOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwogICAgIGlmICghZmlsbEJ1
ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgYnVmZmVyKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKQEAgLTE1
ODQsNiArMTU5NCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkTW9kdWxlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rv
cjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0o
ZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7CkBAIC0xNjA4LDYgKzE2MjAsOCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFN0cmluZyBzb3VyY2UgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsK
ICAgICBzdG9wV2F0Y2guc3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk2NjM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA1LDcgKzIwNSwxMCBAQCBDYWxsVHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENh
bGxEYXRhKEpTCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNl
RGF0ZShleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpKSk7CisgICAgU3RyaW5nIGRhdGVTdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbihleGVjKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0ZShleGVjLT52bSgpLCBkYXRlU3Ry
KSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVOb3coRXhlY1N0YXRl
KiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTk2NjM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NzQsNiArNTc0LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jRQogICAgIH0KIAogICAgIFN0cmluZyBzID0geC50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKHMuaXM4Qml0
KCkpIHsKICAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4gcHJlcGFyc2VyKGV4ZWMsIHMuY2hh
cmFjdGVyczgoKSwgcy5sZW5ndGgoKSwgTm9uU3RyaWN0SlNPTik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAxOTY2MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsMTAgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICBpZiAoaSkKICAgICAg
ICAgICAgIGRhdGFMb2coIiAiKTsKLSAgICAgICAgZGF0YUxvZyhleGVjLT51bmNoZWNrZWRBcmd1
bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgICAgICBTdHJpbmcgYXJn
U3RyID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBkYXRhTG9nKGFyZ1N0
cik7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTY2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNi0wMi0xNyAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2FsbGVycyBvZiBKU1N0cmluZzo6
dmFsdWUoKSBzaG91bGQgY2hlY2sgZm9yIGV4Y2VwdGlvbnMgdGhlcmVhZnRlci4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDM0NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIFRo
ZSBjcmFzaCB0aGF0IHJlc3VsdHMgZnJvbSB0aGlzIGlzc3VlIGlzIGRlcGVuZGVudCBvbiBhIHJh
Y2UKKyAgICAgICAgY29uZGl0aW9uIHdoZXJlIGFuIE91dE9mTWVtb3J5IGVycm9yIG9jY3VycyBw
cmVjaXNlbHkgYXQgdGhlIHBvaW50IHdoZXJlIHRoZQorICAgICAgICBKU1N0cmluZzo6dmFsdWUo
KSBmdW5jdGlvbiBpcyBjYWxsZWQgb24gYSByb3BlIEpTU3RyaW5nLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYWxsSFRNTEFsbENvbGxlY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3RvcmFn
ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N0b3JhZ2U6OnB1dERlbGVnYXRlKToK
KyAgICAgICAgLSBDaGFuZ2VkIHRoZSByZXR1cm4gdmFsdWUgdG8gZmFsc2UgaWYgd2UgcmV0dXJu
IGVhcmx5IGR1ZSB0byBhbiBleGNlcHRpb24uICBUaGlzCisgICAgICAgICAgaXMgYmVjYXVzZSB0
aGUgcHV0IG9wZXJhdGlvbiBoYXNuJ3QgYWN0dWFsbHkgdGFrZW4gcGxhY2UgeWV0LgorCiAyMDE2
LTAyLTE2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBGYWN0
b3IgaWQgbXV0YXRpb24gc3R5bGUgaW52YWxpZGF0aW9uIGNvZGUgaW50byBhIGNsYXNzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTk2NjM2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDYgKzY1LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewogICAgICAgICAvLyBTdXBwb3J0
IGZvciBkb2N1bWVudC5hbGwoPGluZGV4PikgZXRjLgogICAgICAgICBTdHJpbmcgc3RyaW5nID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4
ID0gcGFyc2VJbmRleCgqc3RyaW5nLmltcGwoKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29sbGVj
dGlvbi5pdGVtKGluZGV4LnZhbHVlKCkpKSk7CiAKQEAgLTc0LDYgKzc2LDggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAgICAgLy8gVGhlIHNlY29uZCBhcmcs
IGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdlIHdhbnQKICAgICBTdHJpbmcgc3Ry
aW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFy
c2VJbmRleCgqZXhlYy0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZXhlYykuaW1wbCgpKSkgewog
ICAgICAgICBpZiAoYXV0byogaXRlbSA9IGNvbGxlY3Rpb24ubmFtZWRJdGVtV2l0aEluZGV4KHN0
cmluZywgaW5kZXgudmFsdWUoKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgaXRlbSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZp
c2lvbiAxOTY2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBKU1N0b3JhZ2U6
OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZQogCiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHdyYXBwZWQoKS5zZXRJdGVtKHByb3BlcnR5TmFt
ZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIHN0cmluZ1ZhbHVlLCBlYyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271571</attachid>
            <date>2016-02-17 11:35:39 -0800</date>
            <delta_ts>2016-02-17 12:03:07 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-154346.patch</filename>
            <type>text/plain</type>
            <size>10242</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDE2LTAyLTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
YWxsZXJzIG9mIEpTU3RyaW5nOjp2YWx1ZSgpIHNob3VsZCBjaGVjayBmb3IgZXhjZXB0aW9ucyB0
aGVyZWFmdGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU0MzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSlNTdHJpbmc6OnZhbHVlKCkgY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgSlMgc3Ry
aW5nIGlzIGEgcm9wZSBhbmQgdmFsdWUoKSAKKyAgICAgICAgbmVlZHMgdG8gcmVzb2x2ZSB0aGUg
cm9wZSBidXQgZW5jb3VudGVycyBhbiBPdXRPZk1lbW9yeSBlcnJvci4gIElmIHZhbHVlKCkgaXMg
bm90CisgICAgICAgIGFibGUgdG8gcmVzb2x2ZSB0aGUgcm9wZSwgaXQgd2lsbCByZXR1cm4gYSBu
dWxsIHN0cmluZyAoaW4gYWRkaXRpb24gdG8gdGhyb3dpbmcKKyAgICAgICAgdGhlIGV4Y2VwdGlv
bikuICBJZiBhIGNhbGxlciBkb2VzIG5vdCBjaGVjayBmb3IgZXhjZXB0aW9ucyBhZnRlciBjYWxs
aW5nCisgICAgICAgIEpTU3RyaW5nOjp2YWx1ZSgpLCB0aGV5IG1heSBldmVudHVhbGx5IHVzZSB0
aGUgcmV0dXJuZWQgbnVsbCBzdHJpbmcgYW5kIGNyYXNoIHRoZQorICAgICAgICBWTS4KKworICAg
ICAgICBUaGUgZml4IGlzIHRvIGFkZCBhbGwgdGhlIG5lY2Vzc2FyeSBleGNlcHRpb24gY2hlY2tz
LCBhbmQgZG8gdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIGhhbmRsaW5nIGlmIG5lZWRlZC4KKwor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAgIChmdW5j
dGlvbkxvYWQpOgorICAgICAgICAoZnVuY3Rpb25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlv
bkNoZWNrU3ludGF4KToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KToKKyAgICAg
ICAgKGZ1bmN0aW9uTG9hZE1vZHVsZSk6CisgICAgICAgIChmdW5jdGlvbkNoZWNrTW9kdWxlU3lu
dGF4KToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmRhdGVQYXJzZSk6CisgICAgICAgIChKU0M6OmRhdGVOb3cpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
RXZhbCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uUHJpbnQpOgorCiAyMDE2LTAyLTE3ICBHYXZpbiBCYXJyYWNsb3VnaCAg
PGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0RPTVdpbmRvdzo6cHV0IHNob3Vs
ZCBub3QgZG8gdGhlIHNhbWUgdGhpbmcgdHdpY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShy
ZXZpc2lvbiAxOTY2MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI0Myw2ICsxMjQzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblZlcgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxl
U3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwpAQCAtMTI3Miw2ICsxMjc0LDggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bgogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFN0cmlu
ZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBp
ZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4i
KSkpKTsKQEAgLTEyODgsNiArMTI5Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Mb2EKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkRmls
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50
c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKQEAgLTEyOTgsNiArMTMwNCw4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWEKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0
OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3Jp
cHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3Bl
biBmaWxlLiIpKSkpOwpAQCAtMTU2NSw2ICsxNTczLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbklzMwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxvYWRXZWJBc3NlbWJseShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RyaW5nIGZpbGVOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwogICAgIGlmICghZmlsbEJ1
ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgYnVmZmVyKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKQEAgLTE1
ODQsNiArMTU5NCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkTW9kdWxlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rv
cjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0o
ZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7CkBAIC0xNjA4LDYgKzE2MjAsOCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFN0cmluZyBzb3VyY2UgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsK
ICAgICBzdG9wV2F0Y2guc3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk2NjM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA1LDcgKzIwNSwxMCBAQCBDYWxsVHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENh
bGxEYXRhKEpTCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNl
RGF0ZShleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpKSk7CisgICAgU3RyaW5nIGRhdGVTdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocGFyc2VEYXRlKGV4ZWMtPnZtKCksIGRhdGVTdHIpKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUqIGV4
ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxOTY2MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3NCw2ICs1NzQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNFCiAgICAgfQogCiAgICAgU3RyaW5nIHMgPSB4LnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAocy5pczhCaXQoKSkg
ewogICAgICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBwcmVwYXJzZXIoZXhlYywgcy5jaGFyYWN0
ZXJzOCgpLCBzLmxlbmd0aCgpLCBOb25TdHJpY3RKU09OKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDE5NjYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMywxMCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGlmIChpKQogICAgICAgICAg
ICAgZGF0YUxvZygiICIpOwotICAgICAgICBkYXRhTG9nKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgIFN0cmluZyBhcmdTdHIg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIGRhdGFMb2coYXJnU3RyKTsK
ICAgICB9CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjYzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTAyLTE3ICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDYWxsZXJzIG9mIEpTU3RyaW5nOjp2YWx1
ZSgpIHNob3VsZCBjaGVjayBmb3IgZXhjZXB0aW9ucyB0aGVyZWFmdGVyLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzQ2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAgVGhlIGNy
YXNoIHRoYXQgcmVzdWx0cyBmcm9tIHRoaXMgaXNzdWUgaXMgZGVwZW5kZW50IG9uIGEgcmFjZQor
ICAgICAgICBjb25kaXRpb24gd2hlcmUgYW4gT3V0T2ZNZW1vcnkgZXJyb3Igb2NjdXJzIHByZWNp
c2VseSBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlCisgICAgICAgIEpTU3RyaW5nOjp2YWx1ZSgpIGZ1
bmN0aW9uIGlzIGNhbGxlZCBvbiBhIHJvcGUgSlNTdHJpbmcuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNh
bGxIVE1MQWxsQ29sbGVjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6cHV0RGVsZWdhdGUpOgorICAg
ICAgICAtIENoYW5nZWQgdGhlIHJldHVybiB2YWx1ZSB0byBmYWxzZSBpZiB3ZSByZXR1cm4gZWFy
bHkgZHVlIHRvIGFuIGV4Y2VwdGlvbi4gIFRoaXMKKyAgICAgICAgICBpcyBiZWNhdXNlIHRoZSBw
dXQgb3BlcmF0aW9uIGhhc24ndCBhY3R1YWxseSB0YWtlbiBwbGFjZSB5ZXQuCisKIDIwMTYtMDIt
MTYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEZhY3RvciBp
ZCBtdXRhdGlvbiBzdHlsZSBpbnZhbGlkYXRpb24gY29kZSBpbnRvIGEgY2xhc3MKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAxOTY2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NiArNjUsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7CiAgICAgICAgIC8vIFN1cHBvcnQgZm9y
IGRvY3VtZW50LmFsbCg8aW5kZXg+KSBldGMuCiAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBw
YXJzZUluZGV4KCpzdHJpbmcuaW1wbCgpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9u
Lml0ZW0oaW5kZXgudmFsdWUoKSkpKTsKIApAQCAtNzQsNiArNzYsOCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZywgaWYg
c2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAgIFN0cmluZyBzdHJpbmcg
PSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUlu
ZGV4KCpleGVjLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhleGVjKS5pbXBsKCkpKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBpdGVtID0gY29sbGVjdGlvbi5uYW1lZEl0ZW1XaXRoSW5kZXgoc3RyaW5n
LCBpbmRleC52YWx1ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBpdGVtKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDE5NjYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBib29sIEpTU3RvcmFnZTo6cHV0
RGVsZWdhdGUoRXhlY1N0YXRlKiBlCiAKICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgd3JhcHBlZCgpLnNldEl0ZW0ocHJvcGVydHlOYW1lVG9T
dHJpbmcocHJvcGVydHlOYW1lKSwgc3RyaW5nVmFsdWUsIGVjKTsK
</data>
<flag name="review"
          id="296385"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="296391"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>