diff --git a/src/entt/meta/node.hpp b/src/entt/meta/node.hpp index 7a699cdc6..3e7a907ef 100644 --- a/src/entt/meta/node.hpp +++ b/src/entt/meta/node.hpp @@ -5,6 +5,7 @@ #include #include #include +#include "../config/config.h" #include "../container/dense_map.hpp" #include "../core/attribute.h" #include "../core/enum.hpp" @@ -141,6 +142,7 @@ template return static_cast(nullptr); } else { const element_type args[sizeof...(Args)]{&internal::resolve>>...}; + ENTT_ASSERT(index < sizeof...(Args), "Out of bounds"); return args[index]; } } diff --git a/test/entt/meta/meta_utility.cpp b/test/entt/meta/meta_utility.cpp index 2f5a52142..faacf90fa 100644 --- a/test/entt/meta/meta_utility.cpp +++ b/test/entt/meta/meta_utility.cpp @@ -4,6 +4,7 @@ #include #include #include +#include "../common/config.h" struct clazz { void setter(int v) { @@ -51,6 +52,8 @@ struct MetaUtility: ::testing::Test { } }; +using MetaUtilityDeathTest = MetaUtility; + TEST_F(MetaUtility, MetaDispatch) { int value = 42; @@ -79,6 +82,11 @@ TEST_F(MetaUtility, MetaArg) { ASSERT_EQ((entt::meta_arg>(1u)), entt::resolve()); } +ENTT_DEBUG_TEST_F(MetaUtilityDeathTest, MetaArg) { + ASSERT_DEATH([[maybe_unused]] auto type = entt::meta_arg>(0u), ""); + ASSERT_DEATH([[maybe_unused]] auto type = entt::meta_arg>(3u), ""); +} + TEST_F(MetaUtility, MetaSetter) { const int invalid{}; clazz instance{};