Description

Crash / null pointer dereference in FNiagaraEditorModule::PrecompileDuplicate().

File: Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraCompiler.cpp
Function: FNiagaraEditorModule::PrecompileDuplicate (line 1282)
Crash site: line ~1406, inside the third loop marked with the comment "// Now we can finish off the emitters." (loop starts at line 1392).

The loop guard at line 1399 is:

if (Handle.GetIsEnabled() && Handle.GetInstance().Emitter && (OwningEmitter == nullptr || OwningEmitter == Handle.GetInstance().Emitter))

but the body at line 1406 dereferences Handle.GetEmitterData():

BasePtr->EmitterData[i]->FinishPrecompileDuplicate(
EncounterableEmitterVariables,
StaticVariablesFromEmitter,
ConstantResolver,
&Handle.GetEmitterData()>GetSimulationStages(), // <- crashes when GetEmitterData() returns nullptr
((FNiagaraCompileRequestData*)OwningSystemRequestData)>EmitterData[i]>RapidIterationParams);

FNiagaraEmitterHandle::GetEmitterData() (NiagaraEmitterHandle.cpp:243) is:

FVersionedNiagaraEmitterData* FNiagaraEmitterHandle::GetEmitterData() const

{ return EmitterMode == ENiagaraEmitterMode::Standard ? VersionedInstance.GetEmitterData() : nullptr; }

So when EmitterMode is anything other than Standard (e.g. Stateless), Handle.GetInstance().Emitter can be non-null while GetEmitterData() returns nullptr → null deref on ->GetSimulationStages().

=== Why this is a regression vs. sibling code ===

The two earlier loops in the same file marked with the identical "// Now we can finish off the emitters." comment (NiagaraCompiler.cpp:1064 and :1197) gate on GetEmitterData() directly:

if (Handle.GetIsEnabled() && Handle.GetEmitterData()) // Don't pull in the emitter if it isn't going to be used.

Steps to Reproduce
  1. Create a new NiagaraSystem using a template that goes through FNiagaraEditorModule::PrecompileDuplicate().
  2. Repro is plausible for any system whose emitter handle has EmitterMode != Standard (e.g. Stateless) while still having a valid VersionedInstance.Emitter.

Have Comments or More Details?

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

0
Login to Vote

Fixed
ComponentUE - Niagara
Affects Versions5.7
Target Fix42.00
Fix Commit53431263
CreatedApr 30, 2026
ResolvedMay 1, 2026
UpdatedMay 19, 2026
View Jira Issue