mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-07 03:20:28 +01:00
glsl: Catch subscripted calls to undeclared subroutines
generate_array_index fails to check whether the target of a subroutine call exists in the AST, potentially passing around null ir_rvalue pointers eventuating in abort/segfault. Fixes:fd01840c0b("glsl: add AoA support to subroutines") Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100438 (cherry picked from commitf09c2cefdd)
This commit is contained in:
parent
9ffe450dab
commit
210bbf948e
1 changed files with 7 additions and 2 deletions
|
|
@ -667,8 +667,13 @@ generate_array_index(void *mem_ctx, exec_list *instructions,
|
|||
ir_variable *sub_var = NULL;
|
||||
*function_name = array->primary_expression.identifier;
|
||||
|
||||
match_subroutine_by_name(*function_name, actual_parameters,
|
||||
state, &sub_var);
|
||||
if (!match_subroutine_by_name(*function_name, actual_parameters,
|
||||
state, &sub_var)) {
|
||||
_mesa_glsl_error(&loc, state, "Unknown subroutine `%s'",
|
||||
*function_name);
|
||||
*function_name = NULL; /* indicate error condition to caller */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ir_rvalue *outer_array_idx = idx->hir(instructions, state);
|
||||
return new(mem_ctx) ir_dereference_array(sub_var, outer_array_idx);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue