From ff436ae100792dc04617b27330e4eed0e4e843fc Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Wed, 26 Apr 2023 04:57:04 +0300 Subject: [PATCH] public: crtlib: add safe COM_DefaultExtension and COM_ReplaceExtension --- public/crtlib.c | 8 ++++---- public/crtlib.h | 5 ++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/public/crtlib.c b/public/crtlib.c index 126aed80..b88d2c10 100644 --- a/public/crtlib.c +++ b/public/crtlib.c @@ -714,7 +714,7 @@ void COM_StripExtension( char *path ) COM_DefaultExtension ================== */ -void COM_DefaultExtension( char *path, const char *extension ) +void COM_DefaultExtension( char *path, const char *extension, size_t size ) { const char *src; size_t len; @@ -731,7 +731,7 @@ void COM_DefaultExtension( char *path, const char *extension ) src--; } - Q_strcpy( &path[len], extension ); + Q_strncpy( &path[len], extension, size - len ); } /* @@ -739,10 +739,10 @@ void COM_DefaultExtension( char *path, const char *extension ) COM_ReplaceExtension ================== */ -void COM_ReplaceExtension( char *path, const char *extension ) +void COM_ReplaceExtension( char *path, const char *extension, size_t size ) { COM_StripExtension( path ); - COM_DefaultExtension( path, extension ); + COM_DefaultExtension( path, extension, size ); } /* diff --git a/public/crtlib.h b/public/crtlib.h index 0caf2014..b90fc182 100644 --- a/public/crtlib.h +++ b/public/crtlib.h @@ -79,15 +79,14 @@ const byte *Q_memmem( const byte *haystack, size_t haystacklen, const byte *need const char *Q_timestamp( int format ); int Q_vsnprintf( char *buffer, size_t buffersize, const char *format, va_list args ); int Q_snprintf( char *buffer, size_t buffersize, const char *format, ... ) _format( 3 ); -int Q_sprintf( char *buffer, const char *format, ... ) _format( 2 ); #define Q_strpbrk strpbrk void COM_StripColors( const char *in, char *out ); #define Q_memprint( val ) Q_pretifymem( val, 2 ) char *Q_pretifymem( float value, int digitsafterdecimal ); void COM_FileBase( const char *in, char *out, size_t size ); const char *COM_FileExtension( const char *in ); -void COM_DefaultExtension( char *path, const char *extension ); -void COM_ReplaceExtension( char *path, const char *extension ); +void COM_DefaultExtension( char *path, const char *extension, size_t size ); +void COM_ReplaceExtension( char *path, const char *extension, size_t size ); void COM_ExtractFilePath( const char *path, char *dest ); const char *COM_FileWithoutPath( const char *in ); void COM_StripExtension( char *path );