aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/collision/Maps/MapTree.cpp54
-rw-r--r--src/server/game/Entities/Object/Object.cpp2
-rw-r--r--src/server/game/Maps/Map.cpp73
-rw-r--r--src/server/worldserver/TCSoap/TCSoap.cpp2
4 files changed, 73 insertions, 58 deletions
diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp
index 79ec106a27a..c59f78d1f6b 100644
--- a/src/server/collision/Maps/MapTree.cpp
+++ b/src/server/collision/Maps/MapTree.cpp
@@ -388,29 +388,33 @@ namespace VMAP
// update tree
uint32 referencedVal;
- fread(&referencedVal, sizeof(uint32), 1, tf);
- if (!iLoadedSpawns.count(referencedVal))
+ if (fread(&referencedVal, sizeof(uint32), 1, tf) == 1)
{
-#ifdef VMAP_DEBUG
- if (referencedVal > iNTreeValues)
+ if (!iLoadedSpawns.count(referencedVal))
{
- sLog.outDebug("StaticMapTree::LoadMapTile() : invalid tree element (%u/%u)", referencedVal, iNTreeValues);
- continue;
- }
+#ifdef VMAP_DEBUG
+ if (referencedVal > iNTreeValues)
+ {
+ sLog.outDebug("StaticMapTree::LoadMapTile() : invalid tree element (%u/%u)", referencedVal, iNTreeValues);
+ continue;
+ }
#endif
- iTreeValues[referencedVal] = ModelInstance(spawn, model);
- iLoadedSpawns[referencedVal] = 1;
- }
- else
- {
- ++iLoadedSpawns[referencedVal];
+ iTreeValues[referencedVal] = ModelInstance(spawn, model);
+ iLoadedSpawns[referencedVal] = 1;
+ }
+ else
+ {
+ ++iLoadedSpawns[referencedVal];
#ifdef VMAP_DEBUG
- if (iTreeValues[referencedVal].ID != spawn.ID)
- sLog.outDebug("StaticMapTree::LoadMapTile() : trying to load wrong spawn in node");
- else if (iTreeValues[referencedVal].name != spawn.name)
- sLog.outDebug("StaticMapTree::LoadMapTile() : name collision on GUID=%u", spawn.ID);
+ if (iTreeValues[referencedVal].ID != spawn.ID)
+ sLog.outDebug("StaticMapTree::LoadMapTile() : trying to load wrong spawn in node");
+ else if (iTreeValues[referencedVal].name != spawn.name)
+ sLog.outDebug("StaticMapTree::LoadMapTile() : name collision on GUID=%u", spawn.ID);
#endif
+ }
}
+ else
+ result = false;
}
}
iLoadedTiles[packTileID(tileX, tileY)] = true;
@@ -458,15 +462,17 @@ namespace VMAP
// update tree
uint32 referencedNode;
- fread(&referencedNode, sizeof(uint32), 1, tf);
- if (!iLoadedSpawns.count(referencedNode))
+ if (fread(&referencedNode, sizeof(uint32), 1, tf) != 1)
+ result = false;
+ else
{
+ if (!iLoadedSpawns.count(referencedNode))
sLog.outError("StaticMapTree::UnloadMapTile() : trying to unload non-referenced model '%s' (ID:%u)", spawn.name.c_str(), spawn.ID);
- }
- else if (--iLoadedSpawns[referencedNode] == 0)
- {
- iTreeValues[referencedNode].setUnloaded();
- iLoadedSpawns.erase(referencedNode);
+ else if (--iLoadedSpawns[referencedNode] == 0)
+ {
+ iTreeValues[referencedNode].setUnloaded();
+ iLoadedSpawns.erase(referencedNode);
+ }
}
}
}
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 271a523a611..0099c778289 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1188,7 +1188,7 @@ void MovementInfo::OutDebug()
sLog.outString("guid " UI64FMTD, guid);
sLog.outString("flags %u", flags);
sLog.outString("flags2 %u", flags2);
- sLog.outString("time %u current time %u", flags2, ::time(NULL));
+ sLog.outString("time %u current time " UI64FMTD "", flags2, uint64(::time(NULL)));
sLog.outString("position: `%s`", pos.ToString().c_str());
if (flags & MOVEMENTFLAG_ONTRANSPORT)
{
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index aa6b348e4c9..2986c270b1a 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -85,28 +85,25 @@ bool Map::ExistMap(uint32 mapid,int gx,int gy)
char* tmp = new char[len];
snprintf(tmp, len, (char *)(sWorld.GetDataPath()+"maps/%03u%02u%02u.map").c_str(),mapid,gx,gy);
+ bool ret = false;
FILE *pf=fopen(tmp,"rb");
if (!pf)
- {
sLog.outError("Map file '%s': does not exist!",tmp);
- delete[] tmp;
- return false;
- }
-
- map_fileheader header;
- fread(&header, sizeof(header), 1, pf);
- if (header.mapMagic != uint32(MAP_MAGIC) || header.versionMagic != uint32(MAP_VERSION_MAGIC))
+ else
{
- sLog.outError("Map file '%s' is from an incompatible clientversion. Please recreate using the mapextractor.",tmp);
- delete [] tmp;
- fclose(pf); //close file before return
- return false;
+ map_fileheader header;
+ if (fread(&header, sizeof(header), 1, pf) == 1)
+ {
+ if (header.mapMagic != uint32(MAP_MAGIC) || header.versionMagic != uint32(MAP_VERSION_MAGIC))
+ sLog.outError("Map file '%s' is from an incompatible clientversion. Please recreate using the mapextractor.",tmp);
+ else
+ ret = true;
+ }
}
-
delete [] tmp;
- fclose(pf);
- return true;
+ fclose(pf); //close file before return
+ return ret;
}
bool Map::ExistVMap(uint32 mapid,int gx,int gy)
@@ -1109,7 +1106,13 @@ bool GridMap::loadData(char *filename)
FILE *in = fopen(filename, "rb");
if (!in)
return true;
- fread(&header, sizeof(header),1,in);
+
+ if (fread(&header, sizeof(header),1,in) != 1)
+ {
+ fclose(in);
+ return false;
+ }
+
if (header.mapMagic == uint32(MAP_MAGIC) && header.versionMagic == uint32(MAP_VERSION_MAGIC))
{
// loadup area data
@@ -1160,25 +1163,26 @@ bool GridMap::loadAreaData(FILE *in, uint32 offset, uint32 /*size*/)
{
map_areaHeader header;
fseek(in, offset, SEEK_SET);
- fread(&header, sizeof(header), 1, in);
- if (header.fourcc != uint32(MAP_AREA_MAGIC))
+
+ if (fread(&header, sizeof(header), 1, in) != 1 || header.fourcc != uint32(MAP_AREA_MAGIC))
return false;
m_gridArea = header.gridArea;
if (!(header.flags & MAP_AREA_NO_AREA))
{
m_area_map = new uint16 [16*16];
- fread(m_area_map, sizeof(uint16), 16*16, in);
+ if (fread(m_area_map, sizeof(uint16), 16*16, in) != 16*16)
+ return false;
}
return true;
}
-bool GridMap::loadHeihgtData(FILE *in, uint32 offset, uint32 /*size*/)
+bool GridMap::loadHeihgtData(FILE *in, uint32 offset, uint32 /*size*/)
{
map_heightHeader header;
fseek(in, offset, SEEK_SET);
- fread(&header, sizeof(header), 1, in);
- if (header.fourcc != uint32(MAP_HEIGHT_MAGIC))
+
+ if (fread(&header, sizeof(header), 1, in) != 1 || header.fourcc != uint32(MAP_HEIGHT_MAGIC))
return false;
m_gridHeight = header.gridHeight;
@@ -1188,8 +1192,9 @@ bool GridMap::loadHeihgtData(FILE *in, uint32 offset, uint32 /*size*/)
{
m_uint16_V9 = new uint16 [129*129];
m_uint16_V8 = new uint16 [128*128];
- fread(m_uint16_V9, sizeof(uint16), 129*129, in);
- fread(m_uint16_V8, sizeof(uint16), 128*128, in);
+ if (fread(m_uint16_V9, sizeof(uint16), 129*129, in) != 129*129 ||
+ fread(m_uint16_V8, sizeof(uint16), 128*128, in) != 128*128)
+ return false;
m_gridIntHeightMultiplier = (header.gridMaxHeight - header.gridHeight) / 65535;
m_gridGetHeight = &GridMap::getHeightFromUint16;
}
@@ -1197,8 +1202,9 @@ bool GridMap::loadHeihgtData(FILE *in, uint32 offset, uint32 /*size*/)
{
m_uint8_V9 = new uint8 [129*129];
m_uint8_V8 = new uint8 [128*128];
- fread(m_uint8_V9, sizeof(uint8), 129*129, in);
- fread(m_uint8_V8, sizeof(uint8), 128*128, in);
+ if (fread(m_uint8_V9, sizeof(uint8), 129*129, in) != 129*129 ||
+ fread(m_uint8_V8, sizeof(uint8), 128*128, in) != 128*128)
+ return false;
m_gridIntHeightMultiplier = (header.gridMaxHeight - header.gridHeight) / 255;
m_gridGetHeight = &GridMap::getHeightFromUint8;
}
@@ -1206,8 +1212,9 @@ bool GridMap::loadHeihgtData(FILE *in, uint32 offset, uint32 /*size*/)
{
m_V9 = new float [129*129];
m_V8 = new float [128*128];
- fread(m_V9, sizeof(float), 129*129, in);
- fread(m_V8, sizeof(float), 128*128, in);
+ if (fread(m_V9, sizeof(float), 129*129, in) != 129*129 ||
+ fread(m_V8, sizeof(float), 128*128, in) != 128*128)
+ return false;
m_gridGetHeight = &GridMap::getHeightFromFloat;
}
}
@@ -1220,8 +1227,8 @@ bool GridMap::loadLiquidData(FILE *in, uint32 offset, uint32 /*size*/)
{
map_liquidHeader header;
fseek(in, offset, SEEK_SET);
- fread(&header, sizeof(header), 1, in);
- if (header.fourcc != uint32(MAP_LIQUID_MAGIC))
+
+ if (fread(&header, sizeof(header), 1, in) != 1 || header.fourcc != uint32(MAP_LIQUID_MAGIC))
return false;
m_liquidType = header.liquidType;
@@ -1234,12 +1241,14 @@ bool GridMap::loadLiquidData(FILE *in, uint32 offset, uint32 /*size*/)
if (!(header.flags & MAP_LIQUID_NO_TYPE))
{
m_liquid_type = new uint8 [16*16];
- fread(m_liquid_type, sizeof(uint8), 16*16, in);
+ if (fread(m_liquid_type, sizeof(uint8), 16*16, in) != 16*16)
+ return false;
}
if (!(header.flags & MAP_LIQUID_NO_HEIGHT))
{
m_liquid_map = new float [m_liquid_width*m_liquid_height];
- fread(m_liquid_map, sizeof(float), m_liquid_width*m_liquid_height, in);
+ if (fread(m_liquid_map, sizeof(float), m_liquid_width*m_liquid_height, in) != m_liquid_width*m_liquid_height)
+ return false;
}
return true;
}
diff --git a/src/server/worldserver/TCSoap/TCSoap.cpp b/src/server/worldserver/TCSoap/TCSoap.cpp
index 9a862c6dd81..2a52e054acd 100644
--- a/src/server/worldserver/TCSoap/TCSoap.cpp
+++ b/src/server/worldserver/TCSoap/TCSoap.cpp
@@ -29,7 +29,7 @@ void TCSoapRunnable::run()
pool.activate (THR_NEW_LWP | THR_JOINABLE, POOL_SIZE);
struct soap soap;
- SOCKET m, s;
+ int m, s;
soap_init(&soap);
soap_set_imode(&soap, SOAP_C_UTFSTRING);
soap_set_omode(&soap, SOAP_C_UTFSTRING);