glsl: GLSL ES identifiers cannot exceed 1024 characters
authorIago Toral Quiroga <itoral@igalia.com>
Tue, 20 Jan 2015 16:07:13 +0000 (17:07 +0100)
committerIago Toral Quiroga <itoral@igalia.com>
Fri, 6 Feb 2015 11:21:42 +0000 (12:21 +0100)
v2 (Ian Romanick)
- Move the check to the lexer before rallocing a copy of the large string.

Fixes the following 2 dEQP tests:
dEQP-GLES3.functional.shaders.keywords.invalid_identifiers.max_length_vertex
dEQP-GLES3.functional.shaders.keywords.invalid_identifiers.max_length_fragment

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/glsl/glsl_lexer.ll

index 57c46be84ca537feebf4d205d8687dda87df1f2c..48ba463d353990ebec9063b88d426c06c151896d 100644 (file)
@@ -544,7 +544,13 @@ subroutine KEYWORD(0, 300, 0, 0, SUBROUTINE);
 [_a-zA-Z][_a-zA-Z0-9]* {
                            struct _mesa_glsl_parse_state *state = yyextra;
                            void *ctx = state;  
-                           yylval->identifier = ralloc_strdup(ctx, yytext);
+                           if (state->es_shader && strlen(yytext) > 1024) {
+                              _mesa_glsl_error(yylloc, state,
+                                               "Identifier `%s' exceeds 1024 characters",
+                                               yytext);
+                           } else {
+                             yylval->identifier = ralloc_strdup(ctx, yytext);
+                           }
                            return classify_identifier(state, yytext);
                        }