You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-08 12:40:44 +00:00
Prevents shader crash if passing invalid struct to the return statement
This commit is contained in:
@@ -5861,6 +5861,8 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun
|
|||||||
return ERR_BUG;
|
return ERR_BUG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String return_struct_name = String(b->parent_function->return_struct_name);
|
||||||
|
|
||||||
ControlFlowNode *flow = alloc_node<ControlFlowNode>();
|
ControlFlowNode *flow = alloc_node<ControlFlowNode>();
|
||||||
flow->flow_op = FLOW_OP_RETURN;
|
flow->flow_op = FLOW_OP_RETURN;
|
||||||
|
|
||||||
@@ -5869,7 +5871,7 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun
|
|||||||
if (tk.type == TK_SEMICOLON) {
|
if (tk.type == TK_SEMICOLON) {
|
||||||
//all is good
|
//all is good
|
||||||
if (b->parent_function->return_type != TYPE_VOID) {
|
if (b->parent_function->return_type != TYPE_VOID) {
|
||||||
_set_error("Expected return with expression of type '" + get_datatype_name(b->parent_function->return_type) + "'");
|
_set_error("Expected return with an expression of type '" + (return_struct_name != "" ? return_struct_name : get_datatype_name(b->parent_function->return_type)) + "'");
|
||||||
return ERR_PARSE_ERROR;
|
return ERR_PARSE_ERROR;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -5879,8 +5881,8 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun
|
|||||||
return ERR_PARSE_ERROR;
|
return ERR_PARSE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b->parent_function->return_type != expr->get_datatype()) {
|
if (b->parent_function->return_type != expr->get_datatype() || return_struct_name != expr->get_datatype_name()) {
|
||||||
_set_error("Expected return expression of type '" + get_datatype_name(b->parent_function->return_type) + "'");
|
_set_error("Expected return with an expression of type '" + (return_struct_name != "" ? return_struct_name : get_datatype_name(b->parent_function->return_type)) + "'");
|
||||||
return ERR_PARSE_ERROR;
|
return ERR_PARSE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user