Description

The Vector VM has only every supported a byte's worth of external function calls, when we blew the limit it would index into the incorrect VM call.

The new VM will also overwrite memory when exceeding 255 external function calls due this indexing OOB.

ExecCtx->VVMState->ConstantBuffers[i].i = VectorIntSet1(((uint32 *)ExecCtx->ConstantTableData[ExecCtx->VVMState->ConstMapCacheIdx[i]])[ExecCtx->VVMState->ConstMapCacheSrc[i]]); 

The licensee reported that these parts mismatch...

size_t ExtFnTableNumBytes = VVM_PTR_ALIGN(sizeof(FVectorVMExtFunctionData) * (RuntimeContext.MaxExtFnUsed + 1));

lineOptContext->ExtFnTable = (FVectorVMExtFunctionData *)OptContext->Init.ReallocFn(nullptr, sizeof(FVectorVMExtFunctionData) * NumExtFns, __FILE__, __LINE__); 
Steps to Reproduce
  • Create a NS with a emitter from single looping particle
  • Add a Set Vector4 node to the Emitter Spawn script, then set each parameter to float from curve
    • Repeat this step 10 or more times
  • Keep duplicating the emitter until we eventually crash

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-313139 in the post.

0
Login to Vote

Fixed
ComponentUE - Niagara
Target Fix5.7
Fix Commit44864395
CreatedAug 12, 2025
ResolvedAug 14, 2025
UpdatedAug 15, 2025
View Jira Issue