Skip to content

Commit 8e5b7d9

Browse files
committed
Raise a ChunkTooBig error when trying to save a chunk that exceeds region file allocation limits.
1 parent c7a94c5 commit 8e5b7d9

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

regionfile.py

+11-5
Original file line numberDiff line numberDiff line change
@@ -213,20 +213,22 @@ def copyChunkFrom(self, regionFile, cx, cz):
213213

214214
def saveChunk(self, cx, cz, uncompressedData):
215215
data = deflate(uncompressedData)
216-
self._saveChunk(cx, cz, data, self.VERSION_DEFLATE)
216+
try:
217+
self._saveChunk(cx, cz, data, self.VERSION_DEFLATE)
218+
except ChunkTooBig as e:
219+
raise ChunkTooBig(e.message + " (%d uncompressed)" % len(uncompressedData))
217220

218221
def _saveChunk(self, cx, cz, data, format):
219222
cx &= 0x1f
220223
cz &= 0x1f
221224
offset = self.getOffset(cx, cz)
225+
222226
sectorNumber = offset >> 8
223227
sectorsAllocated = offset & 0xff
224-
225-
226-
227228
sectorsNeeded = (len(data) + self.CHUNK_HEADER_SIZE) / self.SECTOR_BYTES + 1
229+
228230
if sectorsNeeded >= 256:
229-
return
231+
raise ChunkTooBig("Chunk too big! %d bytes exceeds 1MB" % len(data))
230232

231233
if sectorNumber != 0 and sectorsAllocated >= sectorsNeeded:
232234
log.debug("REGION SAVE {0},{1} rewriting {2}b".format(cx, cz, len(data)))
@@ -339,3 +341,7 @@ def setTimestamp(self, cx, cz, timestamp = None):
339341
VERSION_DEFLATE = 2
340342

341343
compressMode = VERSION_DEFLATE
344+
345+
346+
class ChunkTooBig(ValueError):
347+
pass

0 commit comments

Comments
 (0)