diff options
author | Yuri Roubinsky <chaosus89@gmail.com> | 2020-02-16 09:03:53 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-16 09:03:53 +0300 |
commit | eece2c969c21555ae9a8bb018a720d73be0dd55b (patch) | |
tree | 501cbd2988dbcb485939fcc40965e7a5ad0bd65e | |
parent | cb68d832f29d315352e5209e5127d49ec5de77d5 (diff) | |
parent | a1da8560eecf5bfbc6e050022541e43cf74231cd (diff) |
Merge pull request #36251 from Chaosus/fix_struct_crash
Fix shader crash if duplicated struct members created
-rw-r--r-- | servers/visual/shader_language.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp index 734abd7365..a7c18f184d 100644 --- a/servers/visual/shader_language.cpp +++ b/servers/visual/shader_language.cpp @@ -5675,7 +5675,7 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct st.shader_struct = st_node; int member_count = 0; - + Set<String> member_names; while (true) { // variables list tk = _get_token(); if (tk.type == TK_CURLY_BRACKET_CLOSE) { @@ -5732,6 +5732,12 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct member->struct_name = struct_name; member->name = tk.text; + if (member_names.has(member->name)) { + _set_error("Redefinition of '" + String(member->name) + "'"); + return ERR_PARSE_ERROR; + } + member_names.insert(member->name); + tk = _get_token(); if (tk.type == TK_BRACKET_OPEN) { tk = _get_token(); |