From c360d683e0aebe3f6a56257f200cafc7b6849834 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Fri, 16 Nov 2012 09:40:15 +0000 Subject: Fixed crashes caused LightingThread overwriting memory where it shouldn't (yay valgrind!) git-svn-id: http://mc-server.googlecode.com/svn/trunk@1046 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/LightingThread.cpp | 6 +++--- source/LightingThread.h | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/source/LightingThread.cpp b/source/LightingThread.cpp index 7c9529298..94648164e 100644 --- a/source/LightingThread.cpp +++ b/source/LightingThread.cpp @@ -474,7 +474,7 @@ void cLightingThread::CalcLightStep( int SeedY = SeedIdx / BlocksPerYLayer; // Propagate seed: - if (SeedX < cChunkDef::Width * 3) + if (SeedX < cChunkDef::Width * 3 - 1) { PropagateLight(a_Light, SeedIdx, SeedIdx + 1, NumSeedsOut, a_IsSeedOut, a_SeedIdxOut); } @@ -482,7 +482,7 @@ void cLightingThread::CalcLightStep( { PropagateLight(a_Light, SeedIdx, SeedIdx - 1, NumSeedsOut, a_IsSeedOut, a_SeedIdxOut); } - if (SeedZ < cChunkDef::Width * 3) + if (SeedZ < cChunkDef::Width * 3 - 1) { PropagateLight(a_Light, SeedIdx, SeedIdx + cChunkDef::Width * 3, NumSeedsOut, a_IsSeedOut, a_SeedIdxOut); } @@ -490,7 +490,7 @@ void cLightingThread::CalcLightStep( { PropagateLight(a_Light, SeedIdx, SeedIdx - cChunkDef::Width * 3, NumSeedsOut, a_IsSeedOut, a_SeedIdxOut); } - if (SeedY < cChunkDef::Height) + if (SeedY < cChunkDef::Height - 1) { PropagateLight(a_Light, SeedIdx, SeedIdx + cChunkDef::Width * cChunkDef::Width * 3 * 3, NumSeedsOut, a_IsSeedOut, a_SeedIdxOut); } diff --git a/source/LightingThread.h b/source/LightingThread.h index a19bc548e..498755025 100644 --- a/source/LightingThread.h +++ b/source/LightingThread.h @@ -146,7 +146,7 @@ protected: int & a_NumSeedsOut, unsigned char * a_IsSeedOut, unsigned int * a_SeedIdxOut ); - /// Compresses from 1-byte-per-block into 2-bytes-per-block: + /// Compresses from 1-block-per-byte (faster calc) into 2-blocks-per-byte (MC storage): void CompressLight(NIBBLETYPE * a_LightArray, NIBBLETYPE * a_ChunkLight); inline void PropagateLight( @@ -155,6 +155,11 @@ protected: int & a_NumSeedsOut, unsigned char * a_IsSeedOut, unsigned int * a_SeedIdxOut ) { + ASSERT(a_SrcIdx >= 0); + ASSERT(a_SrcIdx < ARRAYCOUNT(m_SkyLight)); + ASSERT(a_DstIdx >= 0); + ASSERT(a_DstIdx < ARRAYCOUNT(m_BlockTypes)); + if (a_Light[a_SrcIdx] <= a_Light[a_DstIdx] + g_BlockSpreadLightFalloff[m_BlockTypes[a_DstIdx]]) { // We're not offering more light than the dest block already has -- cgit v1.2.3