<?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>227274</bug_id>
          
          <creation_ts>2021-06-22 17:13:13 -0700</creation_ts>
          <short_desc>Fix incorrect indexing / out of bounds access in getRestartIndices</short_desc>
          <delta_ts>2021-06-24 03:13:14 -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>ANGLE</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="Kyle Piddington">kpiddington</reporter>
          <assigned_to name="Kyle Piddington">kpiddington</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1771828</commentid>
    <comment_count>0</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-22 17:13:13 -0700</bug_when>
    <thetext>Fix incorrect indexing / out of bounds access in getRestartIndices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771830</commentid>
    <comment_count>1</comment_count>
      <attachid>432008</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-22 17:14:49 -0700</bug_when>
    <thetext>Created attachment 432008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771831</commentid>
    <comment_count>2</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-22 17:14:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/79244789&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771832</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-06-22 17:16:01 -0700</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See https://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771835</commentid>
    <comment_count>4</comment_count>
      <attachid>432008</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-06-22 17:29:26 -0700</bug_when>
    <thetext>Comment on attachment 432008
Patch

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

&gt; Source/ThirdParty/ANGLE/ChangeLog:8
&gt; +        In the case where a restart index is present in the last element of an index array, we can accidently
&gt; +        access out of bounds. Fix this by checking boundaries, and fixing other indexing errors

Do we need a new test, or did the existing tests pick this up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772029</commentid>
    <comment_count>5</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-23 12:14:13 -0700</bug_when>
    <thetext>(In reply to Dean Jackson from comment #4)
&gt; Comment on attachment 432008 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432008&amp;action=review
&gt; 
&gt; &gt; Source/ThirdParty/ANGLE/ChangeLog:8
&gt; &gt; +        In the case where a restart index is present in the last element of an index array, we can accidently
&gt; &gt; +        access out of bounds. Fix this by checking boundaries, and fixing other indexing errors
&gt; 
&gt; Do we need a new test, or did the existing tests pick this up?

The existing tests should hit this path, but would probably only trigger on ASAN builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772197</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-23 23:53:02 -0700</bug_when>
    <thetext>Committed r279213 (239099@main): &lt;https://commits.webkit.org/239099@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432008.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772234</commentid>
    <comment_count>7</comment_count>
      <attachid>432008</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-06-24 03:13:14 -0700</bug_when>
    <thetext>Comment on attachment 432008
Patch

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

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/BufferMtl.mm:418
&gt;      T *bufferData = (T*)(idxBuffer-&gt;mapReadOnly(ctx));

do you need unmap?

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/BufferMtl.mm:420
&gt; +    for(int i = 0; i &lt; numIndices; i++)

I think the algorithm creates many 1 length ranges for contents like F,F,F,F 
IndexRange is inclusive and as such cannot represent zero length ranges.

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/BufferMtl.mm:436
&gt;          }

template&lt;typename T&gt;
static void calculateRestartRanges(ContextMtl* ctx, mtl::BufferRef idxBuffer, std::vector&lt;IndexRange&gt; * ranges)
{
    ranges-&gt;clear();
    T *bufferData = reinterpret_cast&lt;T*&gt;(idxBuffer-&gt;mapReadOnly(ctx));
    constexpr size_t indexCount = idxBuffer-&gt;size() / sizeof(T)
    constexpr size_t restartMarker = std::numeric_limits&lt;T&gt;::max();
    for(size_t i = 0; i &lt; indexCount;)
    {
        if (bufferData[i] == restartMarker) {
            ++i;
            continue;
        }
        size_t restartBegin = i;
        ++i;
        while (i &lt; indexCount &amp;&amp; bufferData[i] != restartMarker)
        {
            ++i;
        }
        size_t restartEnd = i - 1;
        ranges-&gt;emplace_back(restartBegin, restartEnd);
    }
    idxBuffer-&gt;unmap();
}

I&apos;d write something like that, but I&apos;m the last person to correct anybody&apos;s off-by-ones.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432008</attachid>
            <date>2021-06-22 17:14:49 -0700</date>
            <delta_ts>2021-06-23 23:53:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227274-20210622171448.patch</filename>
            <type>text/plain</type>
            <size>2530</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNTFiNzNiMzNjYWEwNWMwNWMxYzZlYWUyMzc2ODc1NTU1MDFhOTI5Mi4uNTJkZjhmNGM5NzIw
OWIyOThlZDdiZWNhYTk1MGI4OWE0MDQ1YjNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA2LTIyICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IGluY29ycmVjdCBpbmRleGluZyAvIG91dCBv
ZiBib3VuZHMgYWNjZXNzIGluIGdldFJlc3RhcnRJbmRpY2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyNzQKKyAgICAgICAgPHJkYXI6Ly83OTI0
NDc4OT4KKworICAgICAgICBJbiB0aGUgY2FzZSB3aGVyZSBhIHJlc3RhcnQgaW5kZXggaXMgcHJl
c2VudCBpbiB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGluZGV4IGFycmF5LCB3ZSBjYW4gYWNjaWRl
bnRseQorICAgICAgICBhY2Nlc3Mgb3V0IG9mIGJvdW5kcy4gRml4IHRoaXMgYnkgY2hlY2tpbmcg
Ym91bmRhcmllcywgYW5kIGZpeGluZyBvdGhlciBpbmRleGluZyBlcnJvcnMKKworICAgICAgICBU
ZXN0czogUmFuIGRlcXAvZnVuY3Rpb25hbC9nbGVzMy9wcmltaXRpdmVyZXN0YXJ0IHN1aXRlLiBQ
YXNzZWQgOCB0ZXN0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwubW06CisgICAg
ICAgIChyeDo6Y2FsY3VsYXRlUmVzdGFydFJhbmdlcyk6CisKIDIwMjEtMDYtMTcgIEt5bGUgUGlk
ZGluZ3RvbiAgPGtwaWRkaW5ndG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWV0YWwgQU5HTEVd
IFNoYWRlcnMgd2l0aCByZXNlcnZlZCBtZXRhbCBrZXl3b3JkcyBkbyBub3QgdHJhbnNsYXRlLCBu
b3IgZG8gc2hhZGVycyB3aXRoIHN0cnVjdCBhbmQgdmFyaWFibGUgbmFtZXMgdGhhdCBhcmUgdGhl
IHNhbWUgZXhjZXB0IHByZWZpeGVkIGJ5IGFuIHVuZGVyc2NvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwu
bW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
QnVmZmVyTXRsLm1tCmluZGV4IDM3OTQ2MzJmNzM0YWNjMjdhNmMzNjE1NWE2ODRmZmYzOWU0ZWM5
YzYuLjA2ZjhkNTc0ZDYxNGU1ZTRhYTI4YzczYjQ3ODE4NWM3OWE4ODZiNjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZm
ZXJNdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0J1ZmZlck10bC5tbQpAQCAtNDE2LDcgKzQxNiw4IEBAIHN0YXRpYyB2b2lkIGNh
bGN1bGF0ZVJlc3RhcnRSYW5nZXMoQ29udGV4dE10bCogY3R4LCBtdGw6OkJ1ZmZlclJlZiBpZHhC
dWZmZXIsIHN0CiB7CiAgICAgcmFuZ2VzLT5jbGVhcigpOwogICAgIFQgKmJ1ZmZlckRhdGEgPSAo
VCopKGlkeEJ1ZmZlci0+bWFwUmVhZE9ubHkoY3R4KSk7Ci0gICAgZm9yKGludCBpID0gMDsgaSA8
IGlkeEJ1ZmZlci0+c2l6ZSgpL3NpemVvZihUKTsgaSsrKQorICAgIGNvbnN0IHNpemVfdCBudW1J
bmRpY2VzID0gaWR4QnVmZmVyLT5zaXplKCkvc2l6ZW9mKFQpOworICAgIGZvcihpbnQgaSA9IDA7
IGkgPCBudW1JbmRpY2VzOyBpKyspCiAgICAgewogICAgICAgICBUIHZhbHVlID0gYnVmZmVyRGF0
YVtpXTsKICAgICAgICAgaWYodmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkp
CkBAIC00MjcsOCArNDI4LDkgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlUmVzdGFydFJhbmdlcyhD
b250ZXh0TXRsKiBjdHgsIG10bDo6QnVmZmVyUmVmIGlkeEJ1ZmZlciwgc3QKICAgICAgICAgICAg
IGRvCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgICAg
IHZhbHVlID0gYnVmZmVyRGF0YVtpXTsKLSAgICAgICAgICAgIH13aGlsZSAoaSA8IGlkeEJ1ZmZl
ci0+c2l6ZSgpICYmIHZhbHVlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpKTsKKyAg
ICAgICAgICAgICAgICBpZihpIDwgbnVtSW5kaWNlcykKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBidWZmZXJEYXRhW2ldOworICAgICAgICAgICAgfXdoaWxlIChpIDwgbnVtSW5kaWNlcyAm
JiB2YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSk7CiAgICAgICAgICAgICBu
ZXdSYW5nZS5yZXN0YXJ0RW5kID0gaS0xOwogICAgICAgICAgICAgcmFuZ2VzLT5wdXNoX2JhY2so
bmV3UmFuZ2UpOwogICAgICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>