mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 07:00:12 +01:00
glsl: Refactor code to check that identifier names are valid.
GLSL reserves identifiers beginning with "gl_" or containing "__", but we haven't been consistent about enforcing this rule. This patch makes a new function to check whether identifier names are valid. In the process it closes a loophole where we would previously allow function argument names to contain "__". v2: Rename check_valid_identifier() -> validate_identifier(). Add curly braces in validate_identifier(). Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
6a157f2e33
commit
1838df97a2
1 changed files with 32 additions and 33 deletions
|
|
@ -2649,6 +2649,36 @@ handle_geometry_shader_input_decl(struct _mesa_glsl_parse_state *state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
validate_identifier(const char *identifier, YYLTYPE loc,
|
||||||
|
struct _mesa_glsl_parse_state *state)
|
||||||
|
{
|
||||||
|
/* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
|
||||||
|
*
|
||||||
|
* "Identifiers starting with "gl_" are reserved for use by
|
||||||
|
* OpenGL, and may not be declared in a shader as either a
|
||||||
|
* variable or a function."
|
||||||
|
*/
|
||||||
|
if (strncmp(identifier, "gl_", 3) == 0) {
|
||||||
|
_mesa_glsl_error(&loc, state,
|
||||||
|
"identifier `%s' uses reserved `gl_' prefix",
|
||||||
|
identifier);
|
||||||
|
} else if (strstr(identifier, "__")) {
|
||||||
|
/* From page 14 (page 20 of the PDF) of the GLSL 1.10
|
||||||
|
* spec:
|
||||||
|
*
|
||||||
|
* "In addition, all identifiers containing two
|
||||||
|
* consecutive underscores (__) are reserved as
|
||||||
|
* possible future keywords."
|
||||||
|
*/
|
||||||
|
_mesa_glsl_error(&loc, state,
|
||||||
|
"identifier `%s' uses reserved `__' string",
|
||||||
|
identifier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ir_rvalue *
|
ir_rvalue *
|
||||||
ast_declarator_list::hir(exec_list *instructions,
|
ast_declarator_list::hir(exec_list *instructions,
|
||||||
struct _mesa_glsl_parse_state *state)
|
struct _mesa_glsl_parse_state *state)
|
||||||
|
|
@ -3243,28 +3273,7 @@ ast_declarator_list::hir(exec_list *instructions,
|
||||||
* created for the declaration should be added to the IR stream.
|
* created for the declaration should be added to the IR stream.
|
||||||
*/
|
*/
|
||||||
if (earlier == NULL) {
|
if (earlier == NULL) {
|
||||||
/* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
|
validate_identifier(decl->identifier, loc, state);
|
||||||
*
|
|
||||||
* "Identifiers starting with "gl_" are reserved for use by
|
|
||||||
* OpenGL, and may not be declared in a shader as either a
|
|
||||||
* variable or a function."
|
|
||||||
*/
|
|
||||||
if (strncmp(decl->identifier, "gl_", 3) == 0)
|
|
||||||
_mesa_glsl_error(& loc, state,
|
|
||||||
"identifier `%s' uses reserved `gl_' prefix",
|
|
||||||
decl->identifier);
|
|
||||||
else if (strstr(decl->identifier, "__")) {
|
|
||||||
/* From page 14 (page 20 of the PDF) of the GLSL 1.10
|
|
||||||
* spec:
|
|
||||||
*
|
|
||||||
* "In addition, all identifiers containing two
|
|
||||||
* consecutive underscores (__) are reserved as
|
|
||||||
* possible future keywords."
|
|
||||||
*/
|
|
||||||
_mesa_glsl_error(& loc, state,
|
|
||||||
"identifier `%s' uses reserved `__' string",
|
|
||||||
decl->identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add the variable to the symbol table. Note that the initializer's
|
/* Add the variable to the symbol table. Note that the initializer's
|
||||||
* IR was already processed earlier (though it hasn't been emitted
|
* IR was already processed earlier (though it hasn't been emitted
|
||||||
|
|
@ -3505,17 +3514,7 @@ ast_function::hir(exec_list *instructions,
|
||||||
"function body", name);
|
"function body", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
|
validate_identifier(name, this->get_location(), state);
|
||||||
*
|
|
||||||
* "Identifiers starting with "gl_" are reserved for use by
|
|
||||||
* OpenGL, and may not be declared in a shader as either a
|
|
||||||
* variable or a function."
|
|
||||||
*/
|
|
||||||
if (strncmp(name, "gl_", 3) == 0) {
|
|
||||||
YYLTYPE loc = this->get_location();
|
|
||||||
_mesa_glsl_error(&loc, state,
|
|
||||||
"identifier `%s' uses reserved `gl_' prefix", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert the list of function parameters to HIR now so that they can be
|
/* Convert the list of function parameters to HIR now so that they can be
|
||||||
* used below to compare this function's signature with previously seen
|
* used below to compare this function's signature with previously seen
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue