Fix WebGL validation of characters in shader source strings.
Shader source strings are allowed invalid ESSL characters when they are in
comments. Added a simple comment parser to determine which characters
should be validated.
BUG=angleproject:2093
Change-Id: If78a4ecbd61f1700fc18dcb844f3de03314a6a39
Reviewed-on: https://chromium-review.googlesource.com/578567
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/tests/gl_tests/WebGLCompatibilityTest.cpp b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
index eea9553..4ebafb7 100644
--- a/src/tests/gl_tests/WebGLCompatibilityTest.cpp
+++ b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
@@ -892,11 +892,14 @@
"precision highp float;\n"
"uniform vec4 ";
frag += validUniformName;
+ // Insert illegal characters into comments
frag +=
";\n"
+ " // $ \" @ /*\n"
"void main()\n"
- "{\n"
- " gl_FragColor = vec4(1.0);\n"
+ "{/*\n"
+ " ` @ $\n"
+ " */gl_FragColor = vec4(1.0);\n"
"}\n";
ANGLE_GL_PROGRAM(program, vert, frag);
@@ -942,6 +945,39 @@
}
}
+// Test that line continuation is handled correctly when valdiating shader source
+TEST_P(WebGL2CompatibilityTest, ShaderSourceLineContinuation)
+{
+ const char *validVert =
+ "#version 300 es\n"
+ "precision mediump float;\n"
+ "\n"
+ "void main ()\n"
+ "{\n"
+ " float f\\\n"
+ "oo = 1.0;\n"
+ " gl_Position = vec4(foo);\n"
+ "}\n";
+
+ const char *invalidVert =
+ "#version 300 es\n"
+ "precision mediump float;\n"
+ "\n"
+ "void main ()\n"
+ "{\n"
+ " float f\\$\n"
+ "oo = 1.0;\n"
+ " gl_Position = vec4(foo);\n"
+ "}\n";
+
+ GLuint shader = glCreateShader(GL_VERTEX_SHADER);
+ glShaderSource(shader, 1, &validVert, nullptr);
+ EXPECT_GL_NO_ERROR();
+ glShaderSource(shader, 1, &invalidVert, nullptr);
+ EXPECT_GL_ERROR(GL_INVALID_VALUE);
+ glDeleteShader(shader);
+}
+
// Test the checks for OOB reads in the vertex buffers, instanced version
TEST_P(WebGL2CompatibilityTest, DrawArraysBufferOutOfBoundsInstanced)
{