diff options
author | Yuri Roubinsky <chaosus89@gmail.com> | 2021-07-26 17:40:15 +0300 |
---|---|---|
committer | Yuri Roubinsky <chaosus89@gmail.com> | 2021-07-26 17:42:52 +0300 |
commit | c082982a47624b1a451a062562bb9b788ad63331 (patch) | |
tree | e806d6f53494dfb36979d0cb3f61b9db350a6dd5 | |
parent | 64dc58bfba55c4e5dcdce18bf848abf43332afd0 (diff) |
Fix editor crash if passing index as variable to function parameter
-rw-r--r-- | servers/rendering/shader_language.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index c9bdec688d..baa5381554 100644 --- a/servers/rendering/shader_language.cpp +++ b/servers/rendering/shader_language.cpp @@ -4796,10 +4796,12 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons String member_struct_name; if (expr->get_array_size() > 0) { - uint32_t index_constant = static_cast<ConstantNode *>(index)->values[0].uint; - if (index_constant >= (uint32_t)expr->get_array_size()) { - _set_error(vformat("Index [%s] out of range [%s..%s]", index_constant, 0, expr->get_array_size() - 1)); - return nullptr; + if (index->type == Node::TYPE_CONSTANT) { + uint32_t index_constant = static_cast<ConstantNode *>(index)->values[0].uint; + if (index_constant >= (uint32_t)expr->get_array_size()) { + _set_error(vformat("Index [%s] out of range [%s..%s]", index_constant, 0, expr->get_array_size() - 1)); + return nullptr; + } } member_type = expr->get_datatype(); if (member_type == TYPE_STRUCT) { |