From 0986bfa7be645584d5589c1a1f679e2a12b00ad4 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Tue, 15 Nov 2022 13:45:25 +1300 Subject: [PATCH] Prevent relay recursion (#12597) Fixes https://github.com/space-wizards/space-station-14/issues/12562 --- Content.Server/CardboardBox/CardboardBoxSystem.cs | 2 +- .../Movement/Systems/SharedMoverController.Input.cs | 2 ++ .../Movement/Systems/SharedMoverController.Relay.cs | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Content.Server/CardboardBox/CardboardBoxSystem.cs b/Content.Server/CardboardBox/CardboardBoxSystem.cs index 4b49dc902c..c697ed99d5 100644 --- a/Content.Server/CardboardBox/CardboardBoxSystem.cs +++ b/Content.Server/CardboardBox/CardboardBoxSystem.cs @@ -54,7 +54,7 @@ public sealed class CardboardBoxSystem : SharedCardboardBoxSystem foreach (var mover in mobMover) { //Set the movement relay for the box as the first mob - if (component.Mover == null && args.Contents.Contains(mover)) + if (component.Mover == null) { var relay = EnsureComp(mover); _mover.SetRelay(mover, uid, relay); diff --git a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs index 51ec4089bf..27286dc701 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs @@ -8,6 +8,7 @@ using Robust.Shared.Input.Binding; using Robust.Shared.Players; using Robust.Shared.Serialization; using Robust.Shared.Timing; +using Robust.Shared.Utility; namespace Content.Shared.Movement.Systems { @@ -190,6 +191,7 @@ namespace Content.Shared.Movement.Systems if (relayMover.RelayEntity == null) return; + DebugTools.Assert(relayMover.RelayEntity != entity); HandleDirChange(relayMover.RelayEntity.Value, dir, subTick, state); return; } diff --git a/Content.Shared/Movement/Systems/SharedMoverController.Relay.cs b/Content.Shared/Movement/Systems/SharedMoverController.Relay.cs index cec9474a25..77ed9e9755 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.Relay.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.Relay.cs @@ -1,6 +1,7 @@ using Content.Shared.Movement.Components; using Robust.Shared.GameStates; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Shared.Movement.Systems; @@ -22,6 +23,12 @@ public abstract partial class SharedMoverController if (!Resolve(uid, ref component)) return; + if (uid == relayEntity) + { + Logger.Error($"An entity attempted to relay movement to itself. Entity:{ToPrettyString(uid)}"); + return; + } + component.RelayEntity = relayEntity; Dirty(component); } @@ -37,6 +44,7 @@ public abstract partial class SharedMoverController { if (args.Current is not RelayInputMoverComponentState state) return; + DebugTools.Assert(state.Entity != uid); component.RelayEntity = state.Entity; }