From 6184ba60c53deb90edf8317b773ba1ed18a7050d Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Sun, 14 May 2023 21:34:25 -0700 Subject: [PATCH 1/2] Fix chat messages being krangled on dedicated servers --- src/d_clisrv.c | 2 +- src/hu_stuff.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 85ce815e0..6b71ea60f 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -4981,7 +4981,7 @@ static void PT_Say(int node) say_pak say = netbuffer->u.say; - if (playernode[say.source] != node) + if (playernode[say.source] != node && say.source != servernode) return; // Spoofed source! if ((cv_mute.value || say.flags & (HU_CSAY|HU_SHOUT)) && say.source != serverplayer && !(IsPlayerAdmin(say.source))) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 05be35f39..fa366bd36 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -511,7 +511,7 @@ void DoSayCommand(char *message, SINT8 target, UINT8 flags, UINT8 source) char *msg = &buf[3]; // Enforce shout for the dedicated server. - if (dedicated && !(flags & HU_CSAY)) + if (dedicated && source == serverplayer && !(flags & HU_CSAY)) { flags |= HU_SHOUT; } From fdc41848a9dc82b1057f238062beeac32e5f468b Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Sun, 14 May 2023 22:20:33 -0700 Subject: [PATCH 2/2] Oops, servernode isn't a player index --- src/d_clisrv.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 6b71ea60f..415934cc7 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -4981,8 +4981,18 @@ static void PT_Say(int node) say_pak say = netbuffer->u.say; - if (playernode[say.source] != node && say.source != servernode) - return; // Spoofed source! + // Check for a spoofed source. + if (say.source == serverplayer) + { + // Servers aren't guaranteed to have a playernode, dedis exist. + if (node != servernode) + return; + } + else + { + if (playernode[say.source] != node) + return; + } if ((cv_mute.value || say.flags & (HU_CSAY|HU_SHOUT)) && say.source != serverplayer && !(IsPlayerAdmin(say.source))) {