diff options
author | Kenneth Graunke <[email protected]> | 2016-11-12 11:55:30 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-11-12 22:08:15 -0800 |
commit | 151aecabe4be9d45627ef1f6ae6b8d732cea0c28 (patch) | |
tree | b3f51c9dde83bf63494176716d88352d8c3c4e0e | |
parent | 9c676a64273f32c7fb3f2b6973399af1d7f24d46 (diff) |
glsl: Don't crash on function names with invalid identifiers.
Karol Herbst's fuzzing efforts noticed that we would segfault on:
void bug() {
2(0);
}
We just need to bail if the function name isn't an identifier.
Based on a bug fix by Karol Herbst.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97422
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
-rw-r--r-- | src/compiler/glsl/ast_function.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/compiler/glsl/ast_function.cpp b/src/compiler/glsl/ast_function.cpp index ac3b52d24e5..3f353a3017d 100644 --- a/src/compiler/glsl/ast_function.cpp +++ b/src/compiler/glsl/ast_function.cpp @@ -2090,7 +2090,7 @@ ast_function_expression::hir(exec_list *instructions, return handle_method(instructions, state); } else { const ast_expression *id = subexpressions[0]; - const char *func_name; + const char *func_name = NULL; YYLTYPE loc = get_location(); exec_list actual_parameters; ir_variable *sub_var = NULL; @@ -2104,8 +2104,10 @@ ast_function_expression::hir(exec_list *instructions, id->subexpressions[0], id->subexpressions[1], &func_name, &actual_parameters); - } else { + } else if (id->oper == ast_identifier) { func_name = id->primary_expression.identifier; + } else { + _mesa_glsl_error(&loc, state, "function name is not an identifier"); } /* an error was emitted earlier */ |