Fix some warnings by adding error checking to Sample_TempObstacles::loadAll (#245)
This commit is contained in:
parent
b40b5ab7d9
commit
f8c8beb3cb
@ -1448,7 +1448,13 @@ void Sample_TempObstacles::loadAll(const char* path)
|
|||||||
|
|
||||||
// Read header.
|
// Read header.
|
||||||
TileCacheSetHeader header;
|
TileCacheSetHeader header;
|
||||||
fread(&header, sizeof(TileCacheSetHeader), 1, fp);
|
size_t headerReadReturnCode = fread(&header, sizeof(TileCacheSetHeader), 1, fp);
|
||||||
|
if( headerReadReturnCode != 1)
|
||||||
|
{
|
||||||
|
// Error or early EOF
|
||||||
|
fclose(fp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (header.magic != TILECACHESET_MAGIC)
|
if (header.magic != TILECACHESET_MAGIC)
|
||||||
{
|
{
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
@ -1490,17 +1496,34 @@ void Sample_TempObstacles::loadAll(const char* path)
|
|||||||
for (int i = 0; i < header.numTiles; ++i)
|
for (int i = 0; i < header.numTiles; ++i)
|
||||||
{
|
{
|
||||||
TileCacheTileHeader tileHeader;
|
TileCacheTileHeader tileHeader;
|
||||||
fread(&tileHeader, sizeof(tileHeader), 1, fp);
|
size_t tileHeaderReadReturnCode = fread(&tileHeader, sizeof(tileHeader), 1, fp);
|
||||||
|
if( tileHeaderReadReturnCode != 1)
|
||||||
|
{
|
||||||
|
// Error or early EOF
|
||||||
|
fclose(fp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!tileHeader.tileRef || !tileHeader.dataSize)
|
if (!tileHeader.tileRef || !tileHeader.dataSize)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
unsigned char* data = (unsigned char*)dtAlloc(tileHeader.dataSize, DT_ALLOC_PERM);
|
unsigned char* data = (unsigned char*)dtAlloc(tileHeader.dataSize, DT_ALLOC_PERM);
|
||||||
if (!data) break;
|
if (!data) break;
|
||||||
memset(data, 0, tileHeader.dataSize);
|
memset(data, 0, tileHeader.dataSize);
|
||||||
fread(data, tileHeader.dataSize, 1, fp);
|
size_t tileDataReadReturnCode = fread(data, tileHeader.dataSize, 1, fp);
|
||||||
|
if( tileDataReadReturnCode != 1)
|
||||||
|
{
|
||||||
|
// Error or early EOF
|
||||||
|
dtFree(data);
|
||||||
|
fclose(fp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
dtCompressedTileRef tile = 0;
|
dtCompressedTileRef tile = 0;
|
||||||
m_tileCache->addTile(data, tileHeader.dataSize, DT_COMPRESSEDTILE_FREE_DATA, &tile);
|
dtStatus addTileStatus = m_tileCache->addTile(data, tileHeader.dataSize, DT_COMPRESSEDTILE_FREE_DATA, &tile);
|
||||||
|
if (dtStatusFailed(addTileStatus))
|
||||||
|
{
|
||||||
|
dtFree(data);
|
||||||
|
}
|
||||||
|
|
||||||
if (tile)
|
if (tile)
|
||||||
m_tileCache->buildNavMeshTile(tile, m_navMesh);
|
m_tileCache->buildNavMeshTile(tile, m_navMesh);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user