diff options
author | Iago Toral Quiroga <[email protected]> | 2015-01-20 17:07:13 +0100 |
---|---|---|
committer | Iago Toral Quiroga <[email protected]> | 2015-02-06 12:21:42 +0100 |
commit | 71a36e0a2c0f301aa83989dc4ade700a9751493d (patch) | |
tree | 4fb80f7cf83f8b9eeb17a8445fa0086d4930c0fd | |
parent | d4a461caaf00ae13b83f106f032d3f4125687a02 (diff) |
glsl: GLSL ES identifiers cannot exceed 1024 characters
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 <[email protected]>
-rw-r--r-- | src/glsl/glsl_lexer.ll | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/glsl/glsl_lexer.ll b/src/glsl/glsl_lexer.ll index 57c46be84ca..48ba463d353 100644 --- a/src/glsl/glsl_lexer.ll +++ b/src/glsl/glsl_lexer.ll @@ -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); } |