Core/Misc: Fix issues reported by static analysis

Coverity defect IDs: 1227510, 1227434, 1023036, 1062426, 1062425, 1062424, 1062423, 1062422
This commit is contained in:
jackpoz committed 2015-04-04 20:20:04 +02:00
1 parent 5f77145f49
commit d23538ce56
4 files changed
+49 -18

No files matched your search

+27 -10
View File
@@ -63,8 +63,9 @@ typedef struct
map_id *map_ids;
uint16 *areas;
uint16 *LiqType;
char output_path[128] = ".";
char input_path[128] = ".";
#define MAX_PATH_LENGTH 128
char output_path[MAX_PATH_LENGTH] = ".";
char input_path[MAX_PATH_LENGTH] = ".";
uint32 maxAreaId = 0;
// **************************************************
@@ -143,11 +144,11 @@ void Usage(char* prg)
printf(
"Usage:\n"\
"%s -[var] [value]\n"\
"-i set input path\n"\
"-o set output path\n"\
"-i set input path (max %d characters)\n"\
"-o set output path (max %d characters)\n"\
"-e extract only MAP(1)/DBC(2) - standard: both(3)\n"\
"-f height stored as int (less map size but lost some accuracy) 1 by default\n"\
"Example: %s -f 0 -i \"c:\\games\\game\"", prg, prg);
"Example: %s -f 0 -i \"c:\\games\\game\"", prg, MAX_PATH_LENGTH - 1, MAX_PATH_LENGTH - 1, prg);
exit(1);
}
@@ -166,14 +167,20 @@ void HandleArgs(int argc, char * arg[])
switch(arg[c][1])
{
case 'i':
if(c + 1 < argc) // all ok
strcpy(input_path, arg[(c++) + 1]);
if (c + 1 < argc && strlen(arg[c + 1]) < MAX_PATH_LENGTH) // all ok
{
strncpy(input_path, arg[c++ + 1], MAX_PATH_LENGTH);
input_path[MAX_PATH_LENGTH - 1] = '\0';
}
else
Usage(arg[0]);
break;
case 'o':
if(c + 1 < argc) // all ok
strcpy(output_path, arg[(c++) + 1]);
if (c + 1 < argc && strlen(arg[c + 1]) < MAX_PATH_LENGTH) // all ok
{
strncpy(output_path, arg[c++ + 1], MAX_PATH_LENGTH);
output_path[MAX_PATH_LENGTH - 1] = '\0';
}
else
Usage(arg[0]);
break;
@@ -250,7 +257,17 @@ uint32 ReadMapDBC()
for(uint32 x = 0; x < map_count; ++x)
{
map_ids[x].id = dbc.getRecord(x).getUInt(0);
strcpy(map_ids[x].name, dbc.getRecord(x).getString(1));
const char* map_name = dbc.getRecord(x).getString(1);
size_t max_map_name_length = sizeof(map_ids[x].name);
if (strlen(map_name) >= max_map_name_length)
{
printf("Fatal error: Map name too long!\n");
exit(1);
}
strncpy(map_ids[x].name, map_name, max_map_name_length);
map_ids[x].name[max_map_name_length - 1] = '\0';
}
printf("Done! (%u maps loaded)\n", (uint32)map_count);
return map_count;