{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,25]],"date-time":"2026-04-25T15:22:40Z","timestamp":1777130560499,"version":"3.51.4"},"reference-count":44,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2017,10,12]],"date-time":"2017-10-12T00:00:00Z","timestamp":1507766400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/501100000266","name":"Engineering and Physical Sciences Research Council","doi-asserted-by":"publisher","award":["EP\/N026314\/1"],"award-info":[{"award-number":["EP\/N026314\/1"]}],"id":[{"id":"10.13039\/501100000266","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2017,10,12]]},"abstract":"<jats:p>We present an automated technique for finding defects in compilers for graphics shading languages. key challenge in compiler testing is the lack of an oracle that classifies an output as correct or incorrect; this is particularly pertinent in graphics shader compilers where the output is a rendered image that is typically under-specified. Our method builds on recent successful techniques for compiler validation based on metamorphic testing, and leverages existing high-value graphics shaders to create sets of transformed shaders that should be semantically equivalent. Rendering mismatches are then indicative of shader compilation bugs. Deviant shaders are automatically minimized to identify, in each case, a minimal change to an original high-value shader that induces a shader compiler bug. We have implemented the approach as a tool, GLFuzz, targeting the OpenGL shading language, GLSL. Our experiments over a set of 17 GPU and driver configurations, spanning the main 7 GPU designers, have led to us finding and reporting more than 60 distinct bugs, covering all tested configurations. As well as defective rendering, these issues identify security-critical vulnerabilities that affect WebGL, including a significant remote information leak security bug where a malicious web page can capture the contents of other browser tabs, and a bug whereby visiting a malicious web page can lead to a ``blue screen of death'' under Windows 10. Our findings show that shader compiler defects are prevalent, and that metamorphic testing provides an effective means for detecting them automatically.<\/jats:p>","DOI":"10.1145\/3133917","type":"journal-article","created":{"date-parts":[[2017,10,13]],"date-time":"2017-10-13T15:15:45Z","timestamp":1507907745000},"page":"1-29","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":103,"title":["Automated testing of graphics shader compilers"],"prefix":"10.1145","volume":"1","author":[{"given":"Alastair F.","family":"Donaldson","sequence":"first","affiliation":[{"name":"Imperial College London, UK"}]},{"given":"Hugues","family":"Evrard","sequence":"additional","affiliation":[{"name":"Imperial College London, UK"}]},{"given":"Andrei","family":"Lascu","sequence":"additional","affiliation":[{"name":"Imperial College London, UK"}]},{"given":"Paul","family":"Thomson","sequence":"additional","affiliation":[{"name":"Imperial College London, UK"}]}],"member":"320","published-online":{"date-parts":[[2017,10,12]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"Generation 3.","author":"AMD.","year":"2016","unstructured":"AMD. 2016. Graphics Core Next Architecture , Generation 3. ( 2016 ). http:\/\/gpuopen.com\/compute-product\/ amd-gcn3-isa-architecture-manual\/ . AMD. 2016. Graphics Core Next Architecture, Generation 3. (2016). http:\/\/gpuopen.com\/compute-product\/ amd-gcn3-isa-architecture-manual\/ ."},{"key":"e_1_2_1_2_1","unstructured":"Android Community. 2017. OpenGL ES Testing. (2017). http:\/\/source.android.com\/devices\/graphics\/testing.html .  Android Community. 2017. OpenGL ES Testing. (2017). http:\/\/source.android.com\/devices\/graphics\/testing.html ."},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2014.2372785"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0950-5849(97)00017-7"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1016\/0950-5849(95)01055-6"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSE.2017.70"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2884781.2884878"},{"key":"e_1_2_1_8_1","volume-title":"Technical Report HKUST-CS98-01. Hong Kong University of Science and Technology.","author":"Chen T.Y.","year":"1998","unstructured":"T.Y. Chen , S.C. Cheung , and S.M. Yiu . 1998 . Metamorphic testing: a new approach for generating next test cases. Technical Report HKUST-CS98-01. Hong Kong University of Science and Technology. T.Y. Chen, S.C. Cheung, and S.M. Yiu. 1998. Metamorphic testing: a new approach for generating next test cases. Technical Report HKUST-CS98-01. Hong Kong University of Science and Technology."},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491956.2462173"},{"key":"e_1_2_1_10_1","unstructured":"Context. 2011. WebGL: More WebGL Security Flaws. (2011). https:\/\/www.contextis.com\/resources\/blog\/ webgl-more-webgl-security-flaws\/ .  Context. 2011. WebGL: More WebGL Security Flaws. (2011). https:\/\/www.contextis.com\/resources\/blog\/ webgl-more-webgl-security-flaws\/ ."},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-28891-3_12"},{"key":"e_1_2_1_12_1","unstructured":"Alastair F. Donaldson. 2016. Crashes Hangs and Crazy Images by Adding Zero: Fuzzing OpenGL Shader Compilers. (2016). https:\/\/medium.com\/@afd_icl\/crashes-hangs-and-crazy-images-by-adding-zero-689d15ce922b .  Alastair F. Donaldson. 2016. Crashes Hangs and Crazy Images by Adding Zero: Fuzzing OpenGL Shader Compilers. (2016). https:\/\/medium.com\/@afd_icl\/crashes-hangs-and-crazy-images-by-adding-zero-689d15ce922b ."},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/2896971.2896978"},{"key":"e_1_2_1_14_1","volume-title":"Donaldson and Paul Thomson","author":"Alastair","year":"2017","unstructured":"Alastair F. Donaldson and Paul Thomson . 2017 . Automated Testing of Graphics Shader Compiler: Video Illustration of Security Bugs . (2017). https:\/\/youtu.be\/d3CNfMoP2t8 . Alastair F. Donaldson and Paul Thomson. 2017. Automated Testing of Graphics Shader Compiler: Video Illustration of Security Bugs. (2017). https:\/\/youtu.be\/d3CNfMoP2t8 ."},{"key":"e_1_2_1_15_1","volume-title":"ANGLE: Almost Native Graphics Layer Engine.","year":"2017","unstructured":"Google. 2017 . ANGLE: Almost Native Graphics Layer Engine. (2017). https:\/\/chromium.googlesource.com\/angle\/angle . Google. 2017. ANGLE: Almost Native Graphics Layer Engine. (2017). https:\/\/chromium.googlesource.com\/angle\/angle ."},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/2338965.2336763"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1142\/S0218194007003471"},{"key":"e_1_2_1_18_1","unstructured":"Nicolai H\u00e4hnle. 2017. Piglit - OpenGL driver testing framework. (2017). https:\/\/people.freedesktop.org\/~nh\/piglit\/ .  Nicolai H\u00e4hnle. 2017. Piglit - OpenGL driver testing framework. (2017). https:\/\/people.freedesktop.org\/~nh\/piglit\/ ."},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.4018\/IJSI.2016010102"},{"key":"e_1_2_1_20_1","first-page":"50","article-title":"The OpenGL Shading Language","volume":"4","author":"Kessenich John","year":"2016","unstructured":"John Kessenich , Dave Baldwin , and Randi Rost . 2016 a. The OpenGL Shading Language , Language Version 4 . 50 . (2016). https:\/\/www.opengl.org\/registry\/doc\/GLSLangSpec.4.50.pdf . John Kessenich, Dave Baldwin, and Randi Rost. 2016a. The OpenGL Shading Language, Language Version 4.50. (2016). https:\/\/www.opengl.org\/registry\/doc\/GLSLangSpec.4.50.pdf .","journal-title":"Language Version"},{"key":"e_1_2_1_21_1","volume-title":"https:\/\/www.khronos.org\/ registry\/spir-v\/specs\/1.1\/SPIRV.pdf","author":"Kessenich John","year":"2016","unstructured":"John Kessenich , Boaz Ouriel , and Raun Krisch . 2016b. SPIR-V Specification (Provisional). ( 2016 ). https:\/\/www.khronos.org\/ registry\/spir-v\/specs\/1.1\/SPIRV.pdf . John Kessenich, Boaz Ouriel, and Raun Krisch. 2016b. SPIR-V Specification (Provisional). (2016). https:\/\/www.khronos.org\/ registry\/spir-v\/specs\/1.1\/SPIRV.pdf ."},{"key":"e_1_2_1_22_1","volume-title":"Version 4.5 with SPIR-V (9 ed.)","author":"Kessenich John","unstructured":"John Kessenich , Graham Sellers , and Dave Shreiner . 2016c. OpenGL Programming Guide: The Official Guide to Learning OpenGL , Version 4.5 with SPIR-V (9 ed.) . Addison-Wesley . John Kessenich, Graham Sellers, and Dave Shreiner. 2016c. OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.5 with SPIR-V (9 ed.). Addison-Wesley."},{"issue":"0","key":"e_1_2_1_23_1","first-page":"3","article-title":"WebGL Specification","volume":"1","author":"Khronos Group","year":"2014","unstructured":"Khronos Group . 2014 . WebGL Specification , Version 1 . 0 . 3 . (2014). https:\/\/www.khronos.org\/registry\/webgl\/specs\/1.0\/ . Khronos Group. 2014. WebGL Specification, Version 1.0.3. (2014). https:\/\/www.khronos.org\/registry\/webgl\/specs\/1.0\/ .","journal-title":"Version"},{"key":"e_1_2_1_24_1","volume-title":"Khronos Invites Industry Participation to Create Safety Critical Graphics and Compute Standards, https:\/\/www.khronos.org\/news\/press\/ . (August","author":"Khronos Group","year":"2015","unstructured":"Khronos Group . 2015. Khronos Invites Industry Participation to Create Safety Critical Graphics and Compute Standards, https:\/\/www.khronos.org\/news\/press\/ . (August 2015 ). Khronos Group. 2015. Khronos Invites Industry Participation to Create Safety Critical Graphics and Compute Standards, https:\/\/www.khronos.org\/news\/press\/ . (August 2015)."},{"key":"e_1_2_1_25_1","volume-title":"https:\/\/www.khronos.org\/registry\/vulkan\/specs\/1.0\/pdf\/ vkspec.pdf","author":"Khronos Group","year":"2016","unstructured":"Khronos Group . 2016. Vulkan 1.0.38 \u2013 A Specification . ( 2016 ). https:\/\/www.khronos.org\/registry\/vulkan\/specs\/1.0\/pdf\/ vkspec.pdf . Khronos Group. 2016. Vulkan 1.0.38 \u2013 A Specification. (2016). https:\/\/www.khronos.org\/registry\/vulkan\/specs\/1.0\/pdf\/ vkspec.pdf ."},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/2666356.2594334"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/2814270.2814319"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1109\/SP.2014.9"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/2737924.2737986"},{"key":"e_1_2_1_30_1","first-page":"100","article-title":"Differential Testing for Software","volume":"10","author":"McKeeman William M.","year":"1998","unstructured":"William M. McKeeman . 1998 . Differential Testing for Software . Digital Technical Journal 10 , 1 (1998), 100 \u2013 107 . William M. McKeeman. 1998. Differential Testing for Software. Digital Technical Journal 10, 1 (1998), 100\u2013107.","journal-title":"Digital Technical Journal"},{"key":"e_1_2_1_31_1","unstructured":"Microsoft. 2017a. Direct3D 12 Progrmming Guide. (2017). https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ dn899121(v=vs.85).aspx .  Microsoft. 2017a. Direct3D 12 Progrmming Guide. (2017). https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ dn899121(v=vs.85).aspx ."},{"key":"e_1_2_1_32_1","volume-title":"https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/bb509561(v=vs.85).aspx","author":"HLSL.","year":"2017","unstructured":"Microsoft. 2017b. HLSL. ( 2017 ). https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/bb509561(v=vs.85).aspx . Microsoft. 2017b. HLSL. (2017). https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/bb509561(v=vs.85).aspx ."},{"key":"e_1_2_1_33_1","unstructured":"Multicore Programming Group. 2017. A collection of shader compiler bugs. (2017). http:\/\/github.com\/mc-imperial\/ shader-compiler-bugs .  Multicore Programming Group. 2017. A collection of shader compiler bugs. (2017). http:\/\/github.com\/mc-imperial\/ shader-compiler-bugs ."},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/2909437.2909439"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/2254064.2254104"},{"key":"e_1_2_1_36_1","first-page":"90","article-title":"Compiler validation\u2014a survey. In PASCAL Compiler Validation, B.A. Wichmann and Z.J. Ciechanowicz (Eds.). Wiley-Blackwell","volume":"13","author":"Scowen R.S.","year":"1983","unstructured":"R.S. Scowen and Z.J. Ciechanowicz . 1983 . Compiler validation\u2014a survey. In PASCAL Compiler Validation, B.A. Wichmann and Z.J. Ciechanowicz (Eds.). Wiley-Blackwell , Chapter 13 , 90 \u2013 144 . R.S. Scowen and Z.J. Ciechanowicz. 1983. Compiler validation\u2014a survey. In PASCAL Compiler Validation, B.A. Wichmann and Z.J. Ciechanowicz (Eds.). Wiley-Blackwell, Chapter 13, 90\u2013144.","journal-title":"Chapter"},{"key":"e_1_2_1_37_1","unstructured":"SecurityWeek. 2016. Code Execution Flaw Plagues Intel Graphics Driver. (2016). http:\/\/www.securityweek.com\/ code-execution-flaw-plagues-intel-graphics-driver .  SecurityWeek. 2016. Code Execution Flaw Plagues Intel Graphics Driver. (2016). http:\/\/www.securityweek.com\/ code-execution-flaw-plagues-intel-graphics-driver ."},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2016.2532875"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/2983990.2984038"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1109\/APSEC.2010.39"},{"key":"e_1_2_1_41_1","unstructured":"Ilja van Sprundel. 2014. Windows Kernel Graphics Driver Attack Surface. (2014). https:\/\/www.blackhat.com\/docs\/us-14\/ materials\/us-14-vanSprundel-Windows-Kernel-Graphics-Driver-Attack-Surface.pdf .  Ilja van Sprundel. 2014. Windows Kernel Graphics Driver Attack Surface. (2014). https:\/\/www.blackhat.com\/docs\/us-14\/ materials\/us-14-vanSprundel-Windows-Kernel-Graphics-Driver-Attack-Surface.pdf ."},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1093\/comjnl\/25.4.465"},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/1993498.1993532"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1109\/32.988498"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3133917","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3133917","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T02:13:25Z","timestamp":1750212805000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3133917"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2017,10,12]]},"references-count":44,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2017,10,12]]}},"alternative-id":["10.1145\/3133917"],"URL":"https:\/\/doi.org\/10.1145\/3133917","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2017,10,12]]},"assertion":[{"value":"2017-10-12","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}