]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
The crusade against buffer overflows continues...
authormolivier <molivier@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 2 Oct 2003 09:04:12 +0000 (09:04 +0000)
committermolivier <molivier@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 2 Oct 2003 09:04:12 +0000 (09:04 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3524 d7cf8633-e32d-0410-b094-e92efae38249

cl_particles.c
common.c
common.h
fs.c
fs.h
model_brush.c
r_shadow.c

index 9f09eeecc00af7620c730d5becab3498d27c17c7..59b745fb7ece70b8239284b2d5d25bda2fa6a5cc 100644 (file)
@@ -509,8 +509,8 @@ void CL_ReadPointFile_f (void)
        if (!cl.worldmodel)
                return;
 
        if (!cl.worldmodel)
                return;
 
-       FS_StripExtension(cl.worldmodel->name, name);
-       strcat(name, ".pts");
+       FS_StripExtension (cl.worldmodel->name, name, sizeof (name));
+       strlcat (name, ".pts", sizeof (name));
 #if WORKINGLQUAKE
        pointfile = COM_LoadTempFile (name);
 #else
 #if WORKINGLQUAKE
        pointfile = COM_LoadTempFile (name);
 #else
index 7dab60b7760d462f426d3e542177b99c2c566d13..e8c0893f2fd5d69b62fd4b265b067513f9bf014f 100644 (file)
--- a/common.c
+++ b/common.c
@@ -675,8 +675,8 @@ void COM_InitArgv (void)
 void COM_InitGameType (void)
 {
        char name[MAX_OSPATH];
 void COM_InitGameType (void)
 {
        char name[MAX_OSPATH];
-       FS_StripExtension(com_argv[0], name);
-       COM_ToLowerString(name, name);
+       FS_StripExtension (com_argv[0], name, sizeof (name));
+       COM_ToLowerString (name, name, sizeof (name));
 
        if (strstr(name, "transfusion"))
                gamemode = GAME_TRANSFUSION;
 
        if (strstr(name, "transfusion"))
                gamemode = GAME_TRANSFUSION;
@@ -843,28 +843,37 @@ char *va(const char *format, ...)
 
 
 //======================================
 
 
 //======================================
-// LordHavoc: added these because they are useful
 
 
-void COM_ToLowerString(const char *in, char *out)
+void COM_ToLowerString (const char *in, char *out, size_t size_out)
 {
 {
-       while (*in)
+       if (size_out == 0)
+               return;
+
+       while (*in && size_out > 1)
        {
                if (*in >= 'A' && *in <= 'Z')
                        *out++ = *in++ + 'a' - 'A';
                else
                        *out++ = *in++;
        {
                if (*in >= 'A' && *in <= 'Z')
                        *out++ = *in++ + 'a' - 'A';
                else
                        *out++ = *in++;
+               size_out--;
        }
        }
+       *out = '\0';
 }
 
 }
 
-void COM_ToUpperString(const char *in, char *out)
+void COM_ToUpperString (const char *in, char *out, size_t size_out)
 {
 {
-       while (*in)
+       if (size_out == 0)
+               return;
+
+       while (*in && size_out > 1)
        {
                if (*in >= 'a' && *in <= 'z')
                        *out++ = *in++ + 'A' - 'a';
                else
                        *out++ = *in++;
        {
                if (*in >= 'a' && *in <= 'z')
                        *out++ = *in++ + 'A' - 'a';
                else
                        *out++ = *in++;
+               size_out--;
        }
        }
+       *out = '\0';
 }
 
 int COM_StringBeginsWith(const char *s, const char *match)
 }
 
 int COM_StringBeginsWith(const char *s, const char *match)
index 5e3a0bd0884e4d374e2c409b22eef30aff9c5307..832561a2771e585c7656aa75092f73ae5c4026b6 100644 (file)
--- a/common.h
+++ b/common.h
@@ -176,9 +176,8 @@ extern char *gamename;
 extern char *gamedirname;
 extern char com_modname[MAX_OSPATH];
 
 extern char *gamedirname;
 extern char com_modname[MAX_OSPATH];
 
-// LordHavoc: useful...
-void COM_ToLowerString(const char *in, char *out);
-void COM_ToUpperString(const char *in, char *out);
+void COM_ToLowerString (const char *in, char *out, size_t size_out);
+void COM_ToUpperString (const char *in, char *out, size_t size_out);
 int COM_StringBeginsWith(const char *s, const char *match);
 
 typedef struct stringlist_s
 int COM_StringBeginsWith(const char *s, const char *match);
 
 typedef struct stringlist_s
diff --git a/fs.c b/fs.c
index 7fe9c39a3eaa4ee640496417dc90dd938aac8fef..bbdaf2f6ac3fcad47abb44e78e4d5b797bafb678 100644 (file)
--- a/fs.c
+++ b/fs.c
@@ -1635,16 +1635,21 @@ OTHERS PUBLIC FUNCTIONS
 FS_StripExtension
 ============
 */
 FS_StripExtension
 ============
 */
-void FS_StripExtension (const char *in, char *out)
+void FS_StripExtension (const char *in, char *out, size_t size_out)
 {
        char *last = NULL;
 {
        char *last = NULL;
-       while (*in)
+
+       if (size_out == 0)
+               return;
+
+       while (*in && size_out > 1)
        {
                if (*in == '.')
                        last = out;
                else if (*in == '/' || *in == '\\' || *in == ':')
                        last = NULL;
                *out++ = *in++;
        {
                if (*in == '.')
                        last = out;
                else if (*in == '/' || *in == '\\' || *in == ':')
                        last = NULL;
                *out++ = *in++;
+               size_out--;
        }
        if (last)
                *last = 0;
        }
        if (last)
                *last = 0;
diff --git a/fs.h b/fs.h
index f41a6f1c554a9177231ca604f5a26e7a48c90b4e..43a168373b77e17c75bb0eff014d83c81c8e604a 100644 (file)
--- a/fs.h
+++ b/fs.h
@@ -63,7 +63,7 @@ qboolean FS_WriteFile (const char *filename, void *data, int len);
 
 // ------ Other functions ------ //
 
 
 // ------ Other functions ------ //
 
-void FS_StripExtension (const char *in, char *out);
+void FS_StripExtension (const char *in, char *out, size_t size_out);
 void FS_DefaultExtension (char *path, const char *extension, size_t size_path);
 
 qboolean FS_FileExists (const char *filename);         // the file can be into a package
 void FS_DefaultExtension (char *path, const char *extension, size_t size_path);
 
 qboolean FS_FileExists (const char *filename);         // the file can be into a package
index 55a33a5371e460c3f8f0e28ef84181e19d0ec242..52c6fb5888c87a2f2f90794ac6e8679e775f8af0 100644 (file)
@@ -1038,9 +1038,9 @@ static void Mod_Q1BSP_LoadLighting(lump_t *l)
        else // LordHavoc: bsp version 29 (normal white lighting)
        {
                // LordHavoc: hope is not lost yet, check for a .lit file to load
        else // LordHavoc: bsp version 29 (normal white lighting)
        {
                // LordHavoc: hope is not lost yet, check for a .lit file to load
-               strcpy(litfilename, loadmodel->name);
-               FS_StripExtension(litfilename, litfilename);
-               strcat(litfilename, ".lit");
+               strlcpy (litfilename, loadmodel->name, sizeof (litfilename));
+               FS_StripExtension (litfilename, litfilename, sizeof (litfilename));
+               strlcat (litfilename, ".lit", sizeof (litfilename));
                data = (qbyte*) FS_LoadFile(litfilename, false);
                if (data)
                {
                data = (qbyte*) FS_LoadFile(litfilename, false);
                if (data)
                {
@@ -1093,9 +1093,9 @@ static void Mod_Q1BSP_LoadLightList(void)
        char lightsfilename[1024], *s, *t, *lightsstring;
        mlight_t *e;
 
        char lightsfilename[1024], *s, *t, *lightsstring;
        mlight_t *e;
 
-       strcpy(lightsfilename, loadmodel->name);
-       FS_StripExtension(lightsfilename, lightsfilename);
-       strcat(lightsfilename, ".lights");
+       strlcpy (lightsfilename, loadmodel->name, sizeof (lightsfilename));
+       FS_StripExtension (lightsfilename, lightsfilename, sizeof(lightsfilename));
+       strlcat (lightsfilename, ".lights", sizeof (lightsfilename));
        s = lightsstring = (char *) FS_LoadFile(lightsfilename, false);
        if (s)
        {
        s = lightsstring = (char *) FS_LoadFile(lightsfilename, false);
        if (s)
        {
index 52e4f3508b964520f157746ee9581174bd5aab10..8a05dfa467ca6191c14fc8f33adb9ee27c8b3544 100644 (file)
@@ -1981,8 +1981,8 @@ void R_Shadow_LoadWorldLights(void)
                Con_Printf("No map loaded.\n");
                return;
        }
                Con_Printf("No map loaded.\n");
                return;
        }
-       FS_StripExtension(cl.worldmodel->name, name);
-       strcat(name, ".rtlights");
+       FS_StripExtension (cl.worldmodel->name, name, sizeof (name));
+       strlcat (name, ".rtlights", sizeof (name));
        lightsstring = FS_LoadFile(name, false);
        if (lightsstring)
        {
        lightsstring = FS_LoadFile(name, false);
        if (lightsstring)
        {
@@ -2038,8 +2038,8 @@ void R_Shadow_SaveWorldLights(void)
                Con_Printf("No map loaded.\n");
                return;
        }
                Con_Printf("No map loaded.\n");
                return;
        }
-       FS_StripExtension(cl.worldmodel->name, name);
-       strcat(name, ".rtlights");
+       FS_StripExtension (cl.worldmodel->name, name, sizeof (name));
+       strlcat (name, ".rtlights", sizeof (name));
        bufchars = bufmaxchars = 0;
        buf = NULL;
        for (light = r_shadow_worldlightchain;light;light = light->next)
        bufchars = bufmaxchars = 0;
        buf = NULL;
        for (light = r_shadow_worldlightchain;light;light = light->next)
@@ -2079,8 +2079,8 @@ void R_Shadow_LoadLightsFile(void)
                Con_Printf("No map loaded.\n");
                return;
        }
                Con_Printf("No map loaded.\n");
                return;
        }
-       FS_StripExtension(cl.worldmodel->name, name);
-       strcat(name, ".lights");
+       FS_StripExtension (cl.worldmodel->name, name, sizeof (name));
+       strlcat (name, ".lights", sizeof (name));
        lightsstring = FS_LoadFile(name, false);
        if (lightsstring)
        {
        lightsstring = FS_LoadFile(name, false);
        if (lightsstring)
        {