From 0adb5c94b8230b7a65fc06f90c253576755cedcd Mon Sep 17 00:00:00 2001 From: Tycho Date: Sat, 10 May 2014 17:46:49 +0100 Subject: [PATCH] Fixed stupid buffer overflow in array setblocks --- src/ChunkBuffer.cpp | 6 +++--- src/ChunkBuffer.h | 4 ++-- tests/ChunkBuffer/Copies.cpp | 16 ++++++++-------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/ChunkBuffer.cpp b/src/ChunkBuffer.cpp index a41b8f61a..baeeff890 100644 --- a/src/ChunkBuffer.cpp +++ b/src/ChunkBuffer.cpp @@ -35,7 +35,7 @@ void cChunkBuffer::CopyBlocks (BLOCKTYPE * a_dest, size_t a_Idx, size_t length memcpy( &a_dest[i * segment_length], &m_Sections[i]->m_BlockTypes, - sizeof(BLOCKTYPE) * length + sizeof(BLOCKTYPE) * tocopy ); } else @@ -43,7 +43,7 @@ void cChunkBuffer::CopyBlocks (BLOCKTYPE * a_dest, size_t a_Idx, size_t length memset( &a_dest[i * segment_length], 0, - sizeof(BLOCKTYPE) * length + sizeof(BLOCKTYPE) * tocopy ); } } @@ -141,7 +141,7 @@ void cChunkBuffer::SetBlocks(const BLOCKTYPE * a_src) { for (size_t i = 0; i < CHUNK_SECTION_NUM; i++) { - const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16 / 2; + const size_t segment_length = CHUNK_SECTION_HEIGHT * 16 * 16; if (m_Sections[i]) { memcpy(&m_Sections[i]->m_BlockTypes, &a_src[i * segment_length], sizeof(BLOCKTYPE) * segment_length); diff --git a/src/ChunkBuffer.h b/src/ChunkBuffer.h index 410532232..b1bd024d5 100644 --- a/src/ChunkBuffer.h +++ b/src/ChunkBuffer.h @@ -124,7 +124,7 @@ public: m_Sections[Section] = Allocate(); if(!m_Sections[Section]) { - ASSERT("Failed to allocate a new section in Chunkbuffer"); + ASSERT(!"Failed to allocate a new section in Chunkbuffer"); return; } } @@ -169,7 +169,7 @@ public: m_Sections[Section] = Allocate(); if(!m_Sections[Section]) { - ASSERT("Failed to allocate a new section in Chunkbuffer"); + ASSERT(!"Failed to allocate a new section in Chunkbuffer"); return; } } diff --git a/tests/ChunkBuffer/Copies.cpp b/tests/ChunkBuffer/Copies.cpp index 2f5d48e6a..6bdf80268 100644 --- a/tests/ChunkBuffer/Copies.cpp +++ b/tests/ChunkBuffer/Copies.cpp @@ -15,8 +15,8 @@ int main(int argc, char** argv) testassert(copy.GetBlock(3,1,4) == 0xDE); testassert(copy.GetMeta(3,1,4) == 0xA); - BLOCKTYPE * SrcBlockBuffer = new BLOCKTYPE[256 * 256 * 256]; - for (int i = 0; i < 256* 256 * 256; i += 4) + BLOCKTYPE * SrcBlockBuffer = new BLOCKTYPE[16 * 16 * 256]; + for (int i = 0; i < 16 * 16 * 256; i += 4) { SrcBlockBuffer[i+0] = 0xDE; SrcBlockBuffer[i+1] = 0xAD; @@ -25,16 +25,16 @@ int main(int argc, char** argv) } buffer.SetBlocks(SrcBlockBuffer); - BLOCKTYPE * DstBlockBuffer = new BLOCKTYPE[256 * 256 * 256]; + BLOCKTYPE * DstBlockBuffer = new BLOCKTYPE[16 * 16 * 256]; buffer.CopyBlocks(DstBlockBuffer); - testassert(memcmp(SrcBlockBuffer, DstBlockBuffer, (256 * 256 * 256) -1) == 0); + testassert(memcmp(SrcBlockBuffer, DstBlockBuffer, (16 * 16 * 256) -1) == 0); delete SrcBlockBuffer; delete DstBlockBuffer; SrcBlockBuffer = NULL; DstBlockBuffer = NULL; - NIBBLETYPE * SrcNibbleBuffer = new NIBBLETYPE[256 * 256 * 256/2]; - for (int i = 0; i < 256* 256 * 256 / 2; i += 4) + NIBBLETYPE * SrcNibbleBuffer = new NIBBLETYPE[16 * 16 * 256/2]; + for (int i = 0; i < 16 * 16 * 256 / 2; i += 4) { SrcNibbleBuffer[i+0] = 0xEF; SrcNibbleBuffer[i+1] = 0xDE; @@ -43,9 +43,9 @@ int main(int argc, char** argv) } buffer.SetMeta(SrcNibbleBuffer); - NIBBLETYPE * DstNibbleBuffer = new NIBBLETYPE[256 * 256 * 256/ 2]; + NIBBLETYPE * DstNibbleBuffer = new NIBBLETYPE[16 * 16 * 256/ 2]; buffer.CopyMeta(DstNibbleBuffer); - testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (256 * 256 * 256 /2) -1) == 0); + testassert(memcmp(SrcNibbleBuffer, DstNibbleBuffer, (16 * 16 * 256 /2) -1) == 0); delete SrcNibbleBuffer; delete DstNibbleBuffer; SrcNibbleBuffer = NULL;