It is actually not infinite loop. Blueprint recurse limit exception. Changing max inner loop index to small(10<) it works expected.
ScriptCore.cpp
DEFINE_FUNCTION(UObject::ProcessInternal)
{
...
else if (++FBlueprintExceptionTracker::Get().Recurse == RECURSE_LIMIT)
{
// If we have a return property, return a zeroed value in it, to try and save execution as much as possible
UProperty* ReturnProp = (Function)->GetReturnProperty();
ClearReturnValue(ReturnProp, RESULT_PARAM);
// Notify anyone who cares that we've had a fatal error, so we can shut down PIE, etc
FBlueprintExceptionInfo InfiniteRecursionExceptionInfo(
EBlueprintExceptionType::InfiniteLoop,
FText::Format(
LOCTEXT("InfiniteLoop", "Infinite script recursion ({0} calls) detected - see log for stack trace"),
FText::AsNumber(RECURSE_LIMIT)
)
);
...
On PLATFORM_DESKTOP recurse limited to 250. I think every blueprint node’s recurse counted(250>), event thought IntArray 118.
#if !PLATFORM_DESKTOP
#define RECURSE_LIMIT 120
#else
#define RECURSE_LIMIT 250
#endif