From b7970ed76386ca045fd3a964e4a6dd0fb3bb3e8a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 16 Mar 2020 09:21:37 +0100 Subject: [PATCH] - block StaticPointerSubstitution for non-player objects. The only safe use of this function is to swap out PlayerPawns for morphing or respawning. --- src/dobject.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/dobject.cpp b/src/dobject.cpp index b16e69d9b..e1ebc654b 100644 --- a/src/dobject.cpp +++ b/src/dobject.cpp @@ -491,6 +491,9 @@ void DObject::StaticPointerSubstitution (AActor *old, AActor *notOld) if (old == nullptr) return; + // This is only allowed to replace players. For everything else the results are undefined. + if (!old->IsKindOf(NAME_PlayerPawn) || (notOld != nullptr && !notOld->IsKindOf(NAME_PlayerPawn))) return; + // Go through all objects. i = 0;DObject *last=0; for (probe = GC::Root; probe != NULL; probe = probe->ObjNext)