<?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>200023</bug_id>
          
          <creation_ts>2019-07-22 18:40:26 -0700</creation_ts>
          <short_desc>Fix crashes in ScrollingStateNode::insertChild()</short_desc>
          <delta_ts>2019-07-23 19:42:54 -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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>koivisto</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1554959</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-22 18:40:26 -0700</bug_when>
    <thetext>Fix crashes in ScrollingStateNode::insertChild()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554960</commentid>
    <comment_count>1</comment_count>
      <attachid>374662</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-22 18:41:50 -0700</bug_when>
    <thetext>Created attachment 374662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554961</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-22 18:41:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/53265378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554965</commentid>
    <comment_count>3</comment_count>
      <attachid>374662</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-07-22 18:52:37 -0700</bug_when>
    <thetext>Comment on attachment 374662
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        Crash data suggest that ScrollingStateNode::insertChild() can be passed an index that
&gt; +        is larger than the size of the vector, causing crashes.
&gt; +
&gt; +        Fix defensively by falling back to append() if the passed index is equal to or larger
&gt; +        than the size of the children vector.

Is there a reason we don’t do this inside the insert function instead? Are there other call sites where we want the stricter behavior?

What about asserting the index is valid, even if we prevent the crash in such cases? That could help us some day understand how this happens if we reproduce in a build with assertions on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555113</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-23 12:50:46 -0700</bug_when>
    <thetext>https://trac.webkit.org/r247734</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555284</commentid>
    <comment_count>5</comment_count>
      <attachid>374662</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-07-23 19:12:46 -0700</bug_when>
    <thetext>Comment on attachment 374662
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:119
&gt; +    if (index &gt;= m_children-&gt;size())

The patch you landed uses &quot;&gt;&quot; rather than &quot;&gt;=&quot;. Why is that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555292</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-23 19:42:54 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 374662 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=374662&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:119
&gt; &gt; +    if (index &gt;= m_children-&gt;size())
&gt; 
&gt; The patch you landed uses &quot;&gt;&quot; rather than &quot;&gt;=&quot;. Why is that?

Because Vector::insert() allows inserting at index = size() - it has:
    ASSERT_WITH_SECURITY_IMPLICATION(position &lt;= size());</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374662</attachid>
            <date>2019-07-22 18:41:50 -0700</date>
            <delta_ts>2019-07-22 18:52:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200023-20190722184150.patch</filename>
            <type>text/plain</type>
            <size>1793</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3NjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGE0NjZiY2IxODA3ZWQy
YmQ3MjA0ODIzNDVmNzQ2Njc5ZWZlOWFiMy4uY2FhZjUyZDYzOWM4NTYzMTVmNWExODNmYTQ0ZTFm
NjcwMDQ0YjFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5LTA3LTIyICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEZpeCBjcmFzaGVz
IGluIFNjcm9sbGluZ1N0YXRlTm9kZTo6aW5zZXJ0Q2hpbGQoKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDIzCisgICAgICAgIHJkYXI6Ly9wcm9i
bGVtLzUzMjY1Mzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ3Jhc2ggZGF0YSBzdWdnZXN0IHRoYXQgU2Nyb2xsaW5nU3RhdGVOb2RlOjppbnNlcnRD
aGlsZCgpIGNhbiBiZSBwYXNzZWQgYW4gaW5kZXggdGhhdAorICAgICAgICBpcyBsYXJnZXIgdGhh
biB0aGUgc2l6ZSBvZiB0aGUgdmVjdG9yLCBjYXVzaW5nIGNyYXNoZXMuCisKKyAgICAgICAgRml4
IGRlZmVuc2l2ZWx5IGJ5IGZhbGxpbmcgYmFjayB0byBhcHBlbmQoKSBpZiB0aGUgcGFzc2VkIGlu
ZGV4IGlzIGVxdWFsIHRvIG9yIGxhcmdlcgorICAgICAgICB0aGFuIHRoZSBzaXplIG9mIHRoZSBj
aGlsZHJlbiB2ZWN0b3IuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0
ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjppbnNlcnRD
aGlsZCk6CisKIDIwMTktMDctMjIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgTWFrZSBzb21lIGNvbnN0cnVjdG9ycyBleHBsaWNpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKaW5k
ZXggMmU2ZDRkM2Y4MmI5ZjI0N2UzNDUzMzg0NTAxYThhYmU2NWI5MWMwNi4uNGY0Mjk1MWIwMzA0
MzA0OGE1ZTliZWIyZGFhYjNmZDc4YWFkMzMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuY3BwCkBAIC0xMTYsNyArMTE2LDEx
IEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVOb2RlOjppbnNlcnRDaGlsZChSZWY8U2Nyb2xsaW5nU3Rh
dGVOb2RlPiYmIGNoaWxkTm9kZSwgc2l6ZV90CiAgICAgICAgIG1fY2hpbGRyZW4gPSBzdGQ6Om1h
a2VfdW5pcXVlPFZlY3RvcjxSZWZQdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPj4+KCk7CiAgICAgfQog
Ci0gICAgbV9jaGlsZHJlbi0+aW5zZXJ0KGluZGV4LCBXVEZNb3ZlKGNoaWxkTm9kZSkpOworICAg
IGlmIChpbmRleCA+PSBtX2NoaWxkcmVuLT5zaXplKCkpCisgICAgICAgIG1fY2hpbGRyZW4tPmFw
cGVuZChXVEZNb3ZlKGNoaWxkTm9kZSkpOworICAgIGVsc2UKKyAgICAgICAgbV9jaGlsZHJlbi0+
aW5zZXJ0KGluZGV4LCBXVEZNb3ZlKGNoaWxkTm9kZSkpOworICAgIAogICAgIHNldFByb3BlcnR5
Q2hhbmdlZChDaGlsZE5vZGVzKTsKIH0KIAo=
</data>
<flag name="review"
          id="390446"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>