<?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>159590</bug_id>
          <alias>CVE-2016-4769</alias>
          <creation_ts>2016-07-08 17:27:50 -0700</creation_ts>
          <short_desc>[WebGL] Check for existing buffer exists for enabled vertex array attributes before permitting glDrawArrays to execute</short_desc>
          <delta_ts>2017-10-11 10:30:23 -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>WebGL</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>dino</cc>
    
    <cc>Takuya.Kawasaki</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1209359</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-07-08 17:27:50 -0700</bug_when>
    <thetext>Fuzzing has discovered that the &apos;drawArrays&apos; WebGL call can be made with an enabled vertex array attribute but without a corresponding bound array buffer. This triggers a crash in WebGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209361</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-07-08 17:28:09 -0700</bug_when>
    <thetext>&lt;rdar://problem/26865535&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209588</commentid>
    <comment_count>2</comment_count>
      <attachid>283299</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-07-10 21:37:09 -0700</bug_when>
    <thetext>Created attachment 283299
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209735</commentid>
    <comment_count>3</comment_count>
      <attachid>283299</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-07-11 12:00:22 -0700</bug_when>
    <thetext>Comment on attachment 283299
Patch

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

&gt; LayoutTests/fast/canvas/webgl/webgl-drawarrays-crash-2.html:16
&gt; +        gl.shaderSource(fragmentShader, &apos;highp mat4 my_mat4_0; void main() { gl_FragColor = (my_mat4_0)[0]; }&apos;);

I&apos;m not sure if you need this (although it&apos;s a nice test by itself). I think the crasher is caused by the vertex shader accessing an attribute that hasn&apos;t been bound.

I&apos;m actually a bit surprised that this shader compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209736</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-07-11 12:01:14 -0700</bug_when>
    <thetext>I think the fragment shader could just be:

void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209753</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-07-11 12:42:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I think the fragment shader could just be:
&gt; 
&gt; void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }

You are right -- I&apos;ll simplify the test as you suggest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209754</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-07-11 12:44:04 -0700</bug_when>
    <thetext>Committed r203077: &lt;http://trac.webkit.org/changeset/203077&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283299</attachid>
            <date>2016-07-10 21:37:09 -0700</date>
            <delta_ts>2016-07-11 12:00:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159590-20160710213628.patch</filename>
            <type>text/plain</type>
            <size>4633</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzAxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTA3LTA4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJHTF0gQ2hlY2sgZm9y
IGV4aXN0aW5nIGJ1ZmZlciBleGlzdHMgZm9yIGVuYWJsZWQgdmVydGV4IGFycmF5IGF0dHJpYnV0
ZXMgYmVmb3JlIHBlcm1pdHRpbmcgZ2xEcmF3QXJyYXlzIHRvIGV4ZWN1dGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTU5MAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMjY4NjU1MzU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtZHJhd2FycmF5cy1j
cmFzaC0yLmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKTogSWYgZW5hYmxlZCBhcnJheSBidWZmZXIgYXR0cmli
dXRlcyBleGlzdCwKKyAgICAgICAgZW5zdXJlIHRoYXQgYW4gYXJyYXkgYnVmZmVyIGhhcyBiZWVu
IGJvdW5kLgorCiAyMDE2LTA3LTA4ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4K
IAogICAgICAgICBNb3ZlIHNob3VsZEluaGVyaXRTZWN1cml0eU9yaWdpbkZyb21Pd25lcigpIGZy
b20gVVJMIHRvIERvY3VtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjAzMDA1
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NjEsNiArMTc2MSwxMSBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlCiAgICAgaWYgKGVsZW1lbnRDb3VudCAmJiAhc2F3
RW5hYmxlZEF0dHJpYiAmJiAhbV9jdXJyZW50UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJpYjAo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGVsZW1lbnRDb3VudCAmJiBzYXdF
bmFibGVkQXR0cmliKSB7CisgICAgICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyICYmICFtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjAzMDA1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDctMDggIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdMXSBDaGVjayBmb3IgZXhpc3RpbmcgYnVm
ZmVyIGV4aXN0cyBmb3IgZW5hYmxlZCB2ZXJ0ZXggYXJyYXkgYXR0cmlidXRlcyBiZWZvcmUgcGVy
bWl0dGluZyBnbERyYXdBcnJheXMgdG8gZXhlY3V0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NTkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
Njg2NTUzNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL3dlYmdsLWRyYXdhcnJheXMtY3Jhc2gtMi1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3dlYmdsLWRyYXdhcnJheXMt
Y3Jhc2gtMi5odG1sOiBBZGRlZC4KKwogMjAxNi0wNy0wOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpIHNob3VsZCBtYWlu
dGFpbiBleGlzdGluZyBnZXR0ZXIgLyBzZXR0ZXIgaWYgbm90IG92ZXJyaWRkZW4gaW4gdGhlIG5l
dyBkZXNjcmlwdG9yCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1k
cmF3YXJyYXlzLWNyYXNoLTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3dlYmdsLWRyYXdhcnJheXMtY3Jhc2gtMi1leHBlY3RlZC50eHQJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtZHJh
d2FycmF5cy1jcmFzaC0yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMg
QEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAyMzogV2ViR0w6IElOVkFMSURfT1BFUkFUSU9OOiBk
cmF3QXJyYXlzOiBhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cworUEFTUy4g
WW91IGRpZG4ndCBjcmFzaC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
d2ViZ2wtZHJhd2FycmF5cy1jcmFzaC0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtZHJhd2FycmF5cy1jcmFzaC0yLmh0bWwJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtZHJhd2FycmF5cy1j
cmFzaC0yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVz
dC11dGlscy5qcyI+IDwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgZnVuY3Rpb24gcnVuVGVz
dCgpCisgICAgeworICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
IndlYmdsLWNhbnZhcyIpOworICAgICAgICB2YXIgZ2wgPSBXZWJHTFRlc3RVdGlscy5jcmVhdGUz
RENvbnRleHQoY2FudmFzKTsKKyAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRl
U2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgICAgIHZhciBwcm9ncmFtID0gZ2wuY3Jl
YXRlUHJvZ3JhbSgpOworICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVy
KGdsLlZFUlRFWF9TSEFERVIpOworICAgICAgICBnbC5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVy
LCAnYXR0cmlidXRlIG1lZGl1bXAgbWF0NCBhdHRyaWJ1dGVfbWF0NF8wOyBtZWRpdW1wIG1hdDQg
bXlfbWF0NF8wOyB2b2lkIG1haW4oKSB7IG15X21hdDRfMCA9IGF0dHJpYnV0ZV9tYXQ0XzA7IH0n
KTsKKyAgICAgICAgZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbC5h
dHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICAgICAgZ2wuc2hhZGVyU291
cmNlKGZyYWdtZW50U2hhZGVyLCAnaGlnaHAgbWF0NCBteV9tYXQ0XzA7IHZvaWQgbWFpbigpIHsg
Z2xfRnJhZ0NvbG9yID0gKG15X21hdDRfMClbMF07IH0nKTsKKyAgICAgICAgZ2wuY29tcGlsZVNo
YWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBm
cmFnbWVudFNoYWRlcik7CisgICAgICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOworICAgICAg
ICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KDApOworICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLkxJTkVfTE9PUCwgMCwgMSk7CisK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgIH0KKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAg
ICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgfQorCisgICAgd2luZG93Lm9ucGFnZXNob3cgPSBydW5UZXN0OworICAgIDwv
c2NyaXB0PiAgICAKKzwvaGVhZD4gIAorPGJvZHk+CisgICAgPGRpdj5QQVNTLiBZb3UgZGlkbid0
IGNyYXNoLjwvZGl2PgorICAgIDxjYW52YXMgaWQ9IndlYmdsLWNhbnZhcyIgd2lkdGg9IjEwMHB4
IiBoZWlnaHQ9IjEwMHB4Ij48L2NhbnZhcz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="307001"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>