diff --git a/lib/fizzy/instantiate.cpp b/lib/fizzy/instantiate.cpp index f3aa69194..79fa2c994 100644 --- a/lib/fizzy/instantiate.cpp +++ b/lib/fizzy/instantiate.cpp @@ -40,6 +40,9 @@ void match_imported_functions(const std::vector& module_imported_types void match_limits(const Limits& external_limits, const Limits& module_limits) { + if (external_limits.max.has_value() && external_limits.min > *external_limits.max) + throw instantiate_error{"provided import's min limit is above import's max limit"}; + if (external_limits.min < module_limits.min) throw instantiate_error{"provided import's min is below import's min defined in module"}; diff --git a/test/unittests/instantiate_test.cpp b/test/unittests/instantiate_test.cpp index 1082d7bb6..0db2a2ce5 100644 --- a/test/unittests/instantiate_test.cpp +++ b/test/unittests/instantiate_test.cpp @@ -177,6 +177,10 @@ TEST(instantiate, imported_table_invalid) EXPECT_THROW_MESSAGE(instantiate(*module, {}, {{&table, {10, std::nullopt}}}), instantiate_error, "provided import's max is above import's max defined in module"); + // Provided limits have max less than min + EXPECT_THROW_MESSAGE(instantiate(*module, {}, {{&table, {10, 0}}}), instantiate_error, + "provided import's min limit is above import's max limit"); + // Null pointer EXPECT_THROW_MESSAGE(instantiate(*module, {}, {{nullptr, {10, 30}}}), instantiate_error, "provided imported table has a null pointer to data"); @@ -283,6 +287,10 @@ TEST(instantiate, imported_memory_invalid) EXPECT_THROW_MESSAGE(instantiate(*module, {}, {}, {{&memory, {1, std::nullopt}}}), instantiate_error, "provided import's max is above import's max defined in module"); + // Provided limits have max less than min + EXPECT_THROW_MESSAGE(instantiate(*module, {}, {}, {{&memory, {1, 0}}}), instantiate_error, + "provided import's min limit is above import's max limit"); + // Null pointer EXPECT_THROW_MESSAGE(instantiate(*module, {}, {}, {{nullptr, {1, 3}}}), instantiate_error, "provided imported memory has a null pointer to data");