From b86c1e12b3b26e50ee962b7dee96ddd2a080383d Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Wed, 15 Jun 2016 10:10:54 +0200 Subject: [PATCH] Fix a memory leak in dtBuildTileCacheLayer (#212) --- DetourTileCache/Source/DetourTileCacheBuilder.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/DetourTileCache/Source/DetourTileCacheBuilder.cpp b/DetourTileCache/Source/DetourTileCacheBuilder.cpp index 62a3b04..995e592 100644 --- a/DetourTileCache/Source/DetourTileCacheBuilder.cpp +++ b/DetourTileCache/Source/DetourTileCacheBuilder.cpp @@ -2025,7 +2025,11 @@ dtStatus dtBuildTileCacheLayer(dtTileCacheCompressor* comp, const int bufferSize = gridSize*3; unsigned char* buffer = (unsigned char*)dtAlloc(bufferSize, DT_ALLOC_TEMP); if (!buffer) + { + dtFree(data); return DT_FAILURE | DT_OUT_OF_MEMORY; + } + memcpy(buffer, heights, gridSize); memcpy(buffer+gridSize, areas, gridSize); memcpy(buffer+gridSize*2, cons, gridSize); @@ -2036,7 +2040,11 @@ dtStatus dtBuildTileCacheLayer(dtTileCacheCompressor* comp, int compressedSize = 0; dtStatus status = comp->compress(buffer, bufferSize, compressed, maxCompressedSize, &compressedSize); if (dtStatusFailed(status)) + { + dtFree(buffer); + dtFree(data); return status; + } *outData = data; *outDataSize = headerSize + compressedSize;