@@ -83,7 +83,7 @@ static void Scan_Emitter (ChunkLoadClass &cload, StringList &files, const char *
8383static void Scan_Aggregate (ChunkLoadClass &cload, StringList &files, const char *w3d_name);
8484static void Scan_HLOD (ChunkLoadClass &cload, StringList &files, const char *w3d_name);
8585
86- static void Get_W3D_Name (const char *filename, char *w3d_name);
86+ static void Get_W3D_Name (const char *filename, char *w3d_name, size_t w3d_name_size );
8787static const char * Make_W3D_Filename (const char *w3d_name);
8888
8989
@@ -118,7 +118,7 @@ bool Get_W3D_Dependencies (const char *w3d_filename, StringList &files)
118118
119119 // Get the W3D name from the filename.
120120 char w3d_name[W3D_NAME_LEN];
121- Get_W3D_Name (w3d_filename, w3d_name);
121+ Get_W3D_Name (w3d_filename, w3d_name, ARRAY_SIZE (w3d_name) );
122122
123123 // Create a chunk loader for this file, and scan the file.
124124 ChunkLoadClass cload (file);
@@ -511,7 +511,7 @@ static void Scan_HLOD (ChunkLoadClass &cload, StringList &files, const char *w3d
511511 * HISTORY: *
512512 * 4/3/00 AJA : Created. *
513513 *=============================================================================================*/
514- static void Get_W3D_Name (const char * filename, char * w3d_name)
514+ static void Get_W3D_Name (const char * filename, char * w3d_name, size_t w3d_name_size )
515515{
516516 assert (filename);
517517 assert (w3d_name);
@@ -532,9 +532,9 @@ static void Get_W3D_Name (const char *filename, char *w3d_name)
532532
533533 // Copy all characters from start to end (excluding 'end')
534534 // into the w3d_name buffer. Then capitalize the string.
535- int num_chars = end - start;
536- WWASSERT (num_chars <= W3D_NAME_LEN );
537- strlcpy (w3d_name, start, min (W3D_NAME_LEN , num_chars));
535+ size_t num_chars = end - start;
536+ WWASSERT (num_chars < w3d_name_size );
537+ strlcpy (w3d_name, start, min (w3d_name_size , num_chars));
538538 strupr (w3d_name);
539539}
540540
@@ -554,7 +554,6 @@ static void Get_W3D_Name (const char *filename, char *w3d_name)
554554static const char * Make_W3D_Filename (const char *w3d_name)
555555{
556556 assert (w3d_name);
557- assert (strlen (w3d_name) < W3D_NAME_LEN);
558557
559558 // Copy the w3d name into a static buffer, turn it into lowercase
560559 // letters, and append a ".w3d" file extension. That's the filename.
@@ -565,7 +564,8 @@ static const char * Make_W3D_Filename (const char *w3d_name)
565564 buffer[0 ] = 0 ;
566565 return buffer;
567566 }
568- strcpy (buffer, w3d_name);
567+ const size_t bufferLen = strlcpy (buffer, w3d_name, ARRAY_SIZE (buffer));
568+ (void )bufferLen; WWASSERT (bufferLen < W3D_NAME_LEN);
569569 char *dot = strchr (buffer, ' .' );
570570 if (dot)
571571 *dot = 0 ;
0 commit comments