<?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>215897</bug_id>
          
          <creation_ts>2020-08-27 12:25:04 -0700</creation_ts>
          <short_desc>[JSC] setLength in Array#push could get very large length</short_desc>
          <delta_ts>2020-08-27 17:51:59 -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>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1683448</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-27 12:25:04 -0700</bug_when>
    <thetext>[JSC] setLength in Array#push could get very large length</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683450</commentid>
    <comment_count>1</comment_count>
      <attachid>407422</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-27 12:29:07 -0700</bug_when>
    <thetext>Created attachment 407422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683451</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-27 12:29:09 -0700</bug_when>
    <thetext>&lt;rdar://problem/67859149&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683456</commentid>
    <comment_count>3</comment_count>
      <attachid>407422</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-08-27 12:34:48 -0700</bug_when>
    <thetext>Comment on attachment 407422
Patch

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

r=me with nits.

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        Before r266215, it was using putLength which throws an error. But it is replaced with setLength,

Nit: But it *was* replaced.

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        and JSC::setLength assumes that this never gets such a length with an assertion. We should fix it

Nit: assumes that *it* never gets *a length greater than UINT32_MAX by asserting*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683457</commentid>
    <comment_count>4</comment_count>
      <attachid>407422</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-27 12:35:41 -0700</bug_when>
    <thetext>Comment on attachment 407422
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/ChangeLog:10
&gt;&gt; +        Before r266215, it was using putLength which throws an error. But it is replaced with setLength,
&gt; 
&gt; Nit: But it *was* replaced.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:11
&gt;&gt; +        and JSC::setLength assumes that this never gets such a length with an assertion. We should fix it
&gt; 
&gt; Nit: assumes that *it* never gets *a length greater than UINT32_MAX by asserting*.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683489</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-27 14:33:03 -0700</bug_when>
    <thetext>Committed r266257: &lt;https://trac.webkit.org/changeset/266257&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683509</commentid>
    <comment_count>6</comment_count>
      <attachid>407422</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-27 16:02:02 -0700</bug_when>
    <thetext>Comment on attachment 407422
Patch

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

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:168
&gt; +        if (UNLIKELY(value &gt; UINT32_MAX)) {

Could this be an maxArrayLength constant instead of UINT32_MAX?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683543</commentid>
    <comment_count>7</comment_count>
      <attachid>407422</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-27 17:51:59 -0700</bug_when>
    <thetext>Comment on attachment 407422
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:168
&gt;&gt; +        if (UNLIKELY(value &gt; UINT32_MAX)) {
&gt; 
&gt; Could this be an maxArrayLength constant instead of UINT32_MAX?

Like maybe:

    constexpr uint32_t maxArrayLength = MAX_ARRAY_INDEX + 1;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407422</attachid>
            <date>2020-08-27 12:29:07 -0700</date>
            <delta_ts>2020-08-27 12:34:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215897-20200827122906.patch</filename>
            <type>text/plain</type>
            <size>4217</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTVkYzZiYWYyNTJkZDdlNGY4OGYwYWM1MWNlOTViMTVlNDhhY2I1Li44MDYyYWNjYzYxN2M4ZmI1
ZGJiNmVmMmFkOWFhZWY4MjlmN2I2YzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAyMC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIHNldExlbmd0aCBpbiBBcnJheSNwdXNoIGNvdWxkIGdldCB2ZXJ5
IGxhcmdlIGxlbmd0aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1ODk3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82Nzg1OTE0OT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBcnJheSNwdXNoIGNhbiBn
ZXQgbGVuZ3RoIGxhcmdlciB0aGFuIFVJTlQzMl9NQVguIEFuZCBpbiB0aGlzIGNhc2UsIHdlIHNo
b3VsZCB0aHJvdyBhIFJhbmdlRXJyb3IuCisgICAgICAgIEJlZm9yZSByMjY2MjE1LCBpdCB3YXMg
dXNpbmcgcHV0TGVuZ3RoIHdoaWNoIHRocm93cyBhbiBlcnJvci4gQnV0IGl0IGlzIHJlcGxhY2Vk
IHdpdGggc2V0TGVuZ3RoLAorICAgICAgICBhbmQgSlNDOjpzZXRMZW5ndGggYXNzdW1lcyB0aGF0
IHRoaXMgbmV2ZXIgZ2V0cyBzdWNoIGEgbGVuZ3RoIHdpdGggYW4gYXNzZXJ0aW9uLiBXZSBzaG91
bGQgZml4IGl0CisgICAgICAgIHNvIHRoYXQgQXJyYXkjcHVzaCBzaG91bGQgdGhyb3duIGFuIGVy
cm9yIGNvcnJlY3RseS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpzZXRMZW5ndGgpOgorCiAyMDIwLTA4LTI3ICBLZWl0aCBNaWxsZXIgIDxr
ZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE9TUiBhdmFpbGFiaWxpdHkgdmFsaWRh
dGlvbiBzaG91bGQgcnVuIGZvciBhbnkgbm9kZSB3aXRoIGV4aXRPSwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCmluZGV4IGUyOWI4MjhkNWM1
OTVhNjg2MDc4MWIxM2Y4M2E3NmE0YjgwNjE3ZGUuLjY0MDdlMTUxYWQ4Y2VmODdmNzE1NmU2NTYz
YzczNzk0MDFjMGRmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAKQEAgLTE2MiwxNCArMTYyLDIwIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUgZ2V0UHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqCiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TGVuZ3RoKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNPYmplY3QqIG9iaiwgdWludDY0X3QgdmFsdWUp
CiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IHRydWU7CiAgICAgaWYgKExJS0VMWShp
c0pTQXJyYXkob2JqKSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2
YWx1ZSkgPT0gdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkodmFsdWUgPiBVSU5UMzJfTUFY
KSkgeworICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJJ
bnZhbGlkIGFycmF5IGxlbmd0aCJfcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iaikt
PnNldExlbmd0aChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSksIHRo
cm93RXhjZXB0aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChvYmosIHRocm93RXhjZXB0aW9uKTsKLSAgICAgICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPnB1
dChvYmosIGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcih2
YWx1ZSksIHNsb3QpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIHNjb3BlLnJlbGVhc2Uo
KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmosIHRocm93RXhjZXB0aW9uKTsKKyAgICBv
YmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9iaiwgZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKHZhbHVlKSwgc2xvdCk7CiB9CiAKIG5hbWVzcGFjZSBBcnJh
eVByb3RvdHlwZUludGVybmFsIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjA3MjFiNjQ3NDBlNmQxODIzNTNmMmNlMDg2NTVmYzZhMzg4
OGEzMS4uYzEzMzMwNDFkMzdiZGMwY2ZiNWE4YTk3ZDI2MDcwZTdhNjJmZTNmZCAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAyMC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisg
ICAgICAgIFtKU0NdIHNldExlbmd0aCBpbiBBcnJheSNwdXNoIGNvdWxkIGdldCB2ZXJ5IGxhcmdl
IGxlbmd0aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1ODk3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82Nzg1OTE0OT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9hcnJheS1wdXNoLW1v
cmUtdGhhbi1tYXgtc2l6ZS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAg
IChzaG91bGRUaHJvdyk6CisKIDIwMjAtMDgtMjYgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxl
c2hAZ21haWwuY29tPgogCiAgICAgICAgIE1lcmdlIHB1dExlbmd0aCgpIGludG8gc2V0TGVuZ3Ro
KCkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FycmF5LXB1c2gtbW9yZS10aGFuLW1heC1z
aXplLmpzIGIvSlNUZXN0cy9zdHJlc3MvYXJyYXktcHVzaC1tb3JlLXRoYW4tbWF4LXNpemUuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTMzZWJiODNlMGYwZDdhOWQ0MjQxYzZhODFhMzFlMWRlMTU1NzBkOAotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FycmF5LXB1c2gtbW9yZS10aGFuLW1heC1z
aXplLmpzCkBAIC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0
ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhm
dW5jLCBlcnJvck1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB2
YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKKyAgICAgICAgZXJyb3IgPSBlOwor
ICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25v
dCB0aHJvd24nKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBlcnJvcjogJHtTdHJpbmcoZXJyb3IpfWApOworfQor
CitsZXQgYSA9IEFycmF5KDIqKjMyLTEpOworc2hvdWxkVGhyb3coKCkgPT4geworICAgIGEucHVz
aCgwLCAwKTsKK30sIGBSYW5nZUVycm9yOiBJbnZhbGlkIGFycmF5IGxlbmd0aGApOworc2hvdWxk
QmUoYS5sZW5ndGgsIDIqKjMyIC0gMSk7CitzaG91bGRCZShhWzIqKjMyXSwgMCk7CitzaG91bGRC
ZShhWzIqKjMyIC0gMV0sIDApOworc2hvdWxkQmUoYVsyKiozMiAtIDJdLCB1bmRlZmluZWQpOwo=
</data>
<flag name="review"
          id="422782"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>