Compounded macros in shaders: huge memory consumption
Submitted by Kevin Rogovin
Assigned to Ian Romanick
Description
Created attachment 89625 Vertex shader that has deep macro
The attached shader causes literally gigabytes upon gigabytes of memory to be consumed when submitted to Mesa. The shader cause is because it compounds macros many levels deep. Mesa is at the stage of applying the preprocessor and does not get to even parsing the shader, much less compiling it.
The main issue is for WebGL enabled browsers. Indeed, a malicious website could submit such a shader (which is quite small) and bring the user's system to a standstill halt almost.
A possible fix is to essentially add additional logic to the preprocessor computing the complexity multiplier of a macro and if that complexity multiplies is too high to abort with a message that macro expands into a too large expression.
Attachment 89625, "Vertex shader that has deep macro":
macro-stress.vert.glsl
Version: 9.1