diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/collision/Maps/MapTree.cpp | 54 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 73 | ||||
| -rw-r--r-- | src/server/worldserver/TCSoap/TCSoap.cpp | 2 |
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); |
