From a5e8f791f1dde3b8012ad50f5d8a84428d7072eb Mon Sep 17 00:00:00 2001 From: Gene Date: Fri, 29 May 2026 00:37:23 -0700 Subject: [PATCH] Fix potential undefined behavior from overlapping pointers in `S_StartBackgroundTrack_Actual` --- code/client/snd_dma.cpp | 7 ++++++- codemp/client/snd_dma.cpp | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/code/client/snd_dma.cpp b/code/client/snd_dma.cpp index bb539e4cd6..d84d2ad56a 100644 --- a/code/client/snd_dma.cpp +++ b/code/client/snd_dma.cpp @@ -4085,7 +4085,12 @@ static qboolean S_StartBackgroundTrack_Actual( MusicInfo_t *pMusicInfo, qboolean char dump[16]; char name[MAX_QPATH]; - Q_strncpyz( sMusic_BackgroundLoop, loop, sizeof( sMusic_BackgroundLoop )); + char *bgLoop = sMusic_BackgroundLoop; + + if ( bgLoop != loop ) + {// don't copy into yourself + Q_strncpyz( sMusic_BackgroundLoop, loop, sizeof( sMusic_BackgroundLoop )); + } Q_strncpyz( name, intro, sizeof( name ) - 4 ); // this seems to be so that if the filename hasn't got an extension // but doesn't have the room to append on either then you'll just diff --git a/codemp/client/snd_dma.cpp b/codemp/client/snd_dma.cpp index 736203492a..54b4b2bf20 100644 --- a/codemp/client/snd_dma.cpp +++ b/codemp/client/snd_dma.cpp @@ -4093,7 +4093,12 @@ static qboolean S_StartBackgroundTrack_Actual( MusicInfo_t *pMusicInfo, qboolean char dump[16]; char name[MAX_QPATH]; - Q_strncpyz( sMusic_BackgroundLoop, loop, sizeof( sMusic_BackgroundLoop )); + char *bgLoop = sMusic_BackgroundLoop; + + if ( bgLoop != loop ) + {// don't copy into yourself + Q_strncpyz( sMusic_BackgroundLoop, loop, sizeof( sMusic_BackgroundLoop )); + } Q_strncpyz( name, intro, sizeof( name ) - 4 ); // this seems to be so that if the filename hasn't got an extension // but doesn't have the room to append on either then you'll just