summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@outlook.com>2017-08-18 12:33:46 +0200
committerGitHub <noreply@github.com>2017-08-18 12:33:46 +0200
commite7a5e2952219acbe42b43a0450b388169e2f760a (patch)
tree10f2f398303fb788c0e21e9765eb4cb4096cf13b
parentRepresent cItem::m_Lore as an AStringVector (#3882) (diff)
parentcChunk: Don't assume GetBlockEntity coords are valid (diff)
downloadcuberite-e7a5e2952219acbe42b43a0450b388169e2f760a.tar
cuberite-e7a5e2952219acbe42b43a0450b388169e2f760a.tar.gz
cuberite-e7a5e2952219acbe42b43a0450b388169e2f760a.tar.bz2
cuberite-e7a5e2952219acbe42b43a0450b388169e2f760a.tar.lz
cuberite-e7a5e2952219acbe42b43a0450b388169e2f760a.tar.xz
cuberite-e7a5e2952219acbe42b43a0450b388169e2f760a.tar.zst
cuberite-e7a5e2952219acbe42b43a0450b388169e2f760a.zip
-rw-r--r--src/Chunk.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/Chunk.cpp b/src/Chunk.cpp
index f2b936a3f..4c85c9c80 100644
--- a/src/Chunk.cpp
+++ b/src/Chunk.cpp
@@ -1775,16 +1775,20 @@ void cChunk::AddBlockEntityClean(cBlockEntity * a_BlockEntity)
cBlockEntity * cChunk::GetBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ)
{
- // Check that the query coords are within chunk bounds:
- ASSERT(a_BlockX >= m_PosX * cChunkDef::Width);
- ASSERT(a_BlockX < m_PosX * cChunkDef::Width + cChunkDef::Width);
- ASSERT(a_BlockZ >= m_PosZ * cChunkDef::Width);
- ASSERT(a_BlockZ < m_PosZ * cChunkDef::Width + cChunkDef::Width);
-
int RelX = a_BlockX - m_PosX * cChunkDef::Width;
int RelZ = a_BlockZ - m_PosZ * cChunkDef::Width;
- auto itr = m_BlockEntities.find(MakeIndex(RelX, a_BlockY, RelZ));
+ if (
+ !IsValidWidth (RelX) ||
+ !IsValidHeight(a_BlockY) ||
+ !IsValidWidth (RelZ)
+ )
+ {
+ // Coordinates are outside outside the world, no block entities here
+ return nullptr;
+ }
+
+ auto itr = m_BlockEntities.find(MakeIndexNoCheck(RelX, a_BlockY, RelZ));
return (itr == m_BlockEntities.end()) ? nullptr : itr->second;
}