summaryrefslogtreecommitdiffstats
path: root/src/glsl/glsl_lexer.ll
diff options
context:
space:
mode:
authorIago Toral Quiroga <itoral@igalia.com>2015-01-20 17:07:13 +0100
committerIago Toral Quiroga <itoral@igalia.com>2015-02-06 12:21:42 +0100
commit71a36e0a2c0f301aa83989dc4ade700a9751493d (patch)
tree4fb80f7cf83f8b9eeb17a8445fa0086d4930c0fd /src/glsl/glsl_lexer.ll
parentd4a461caaf00ae13b83f106f032d3f4125687a02 (diff)
downloadexternal_mesa3d-71a36e0a2c0f301aa83989dc4ade700a9751493d.zip
external_mesa3d-71a36e0a2c0f301aa83989dc4ade700a9751493d.tar.gz
external_mesa3d-71a36e0a2c0f301aa83989dc4ade700a9751493d.tar.bz2
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 <ian.d.romanick@intel.com>
Diffstat (limited to 'src/glsl/glsl_lexer.ll')
-rw-r--r--src/glsl/glsl_lexer.ll8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/glsl/glsl_lexer.ll b/src/glsl/glsl_lexer.ll
index 57c46be..48ba463 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);
}