From 5987109014f616254fe76aa384a0ce1c992731cc Mon Sep 17 00:00:00 2001 From: serge_shubin Date: Mon, 23 Mar 2026 05:06:27 +0800 Subject: [PATCH] Filter CS_SERVERINFO/SYSTEMINFO in per-frame configstring changes The per-frame configstring path in SVD_ReadFrame was not filtering dangerous configstrings like SVD_ApplyConfigstrings does. When a recorded map_restart changed CS_SERVERINFO (containing maxclients), applying it overwrote maxclients=64 with the recorded value, triggering a latched restart loop. Co-Authored-By: Claude Opus 4.6 (1M context) --- code/server/sv_netdemo.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/server/sv_netdemo.c b/code/server/sv_netdemo.c index 6fe31ea..9b70979 100644 --- a/code/server/sv_netdemo.c +++ b/code/server/sv_netdemo.c @@ -655,7 +655,7 @@ static qboolean SVD_ReadFrame( fileHandle_t f ) { } } - // read configstring changes + // read configstring changes (skip SERVERINFO/SYSTEMINFO to avoid latch restarts) numChanges = SVD_ReadShort( f ); for ( i = 0; i < numChanges; i++ ) { short idx = SVD_ReadShort( f ); @@ -664,7 +664,9 @@ static qboolean SVD_ReadFrame( fileHandle_t f ) { if ( len > 0 && len < (short)sizeof(buf) ) { FS_Read( buf, len, f ); buf[len - 1] = '\0'; - SV_SetConfigstring( idx, buf ); + if ( idx != CS_SERVERINFO && idx != CS_SYSTEMINFO ) { + SV_SetConfigstring( idx, buf ); + } } }