diff --git a/lib/library.cpp b/lib/library.cpp index 4e542bc55ef..6c80e88e5cc 100644 --- a/lib/library.cpp +++ b/lib/library.cpp @@ -932,6 +932,8 @@ Library::Error Library::loadFunction(const tinyxml2::XMLElement * const node, co } if (const char* const argIndirect = functionnode->Attribute("indirect")) { const int indirect = strToInt(argIndirect); + if (indirect < 0 || indirect >= static_cast(ac.direction.size())) + return Error(ErrorCode::BAD_ATTRIBUTE_VALUE, argIndirect); ac.direction[indirect] = dir; // TODO: handle multiple directions/indirect levels } else diff --git a/test/testlibrary.cpp b/test/testlibrary.cpp index 28264a02a53..aa2df6a0ef2 100644 --- a/test/testlibrary.cpp +++ b/test/testlibrary.cpp @@ -1156,6 +1156,23 @@ class TestLibrary : public TestFixture { // comma followed by dot LOADLIB_ERROR_INVALID_RANGE("-10:0,.5:"); + + // arg indirect out of range (index into ArgumentChecks::direction) + LOADLIBERROR("\n" + "\n" + " \n" + " \n" + " \n" + "", + Library::ErrorCode::BAD_ATTRIBUTE_VALUE); + + LOADLIBERROR("\n" + "\n" + " \n" + " \n" + " \n" + "", + Library::ErrorCode::BAD_ATTRIBUTE_VALUE); } void loadLibCombinations() const {