@@ -213,20 +213,22 @@ def copyChunkFrom(self, regionFile, cx, cz):
213
213
214
214
def saveChunk (self , cx , cz , uncompressedData ):
215
215
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 ))
217
220
218
221
def _saveChunk (self , cx , cz , data , format ):
219
222
cx &= 0x1f
220
223
cz &= 0x1f
221
224
offset = self .getOffset (cx , cz )
225
+
222
226
sectorNumber = offset >> 8
223
227
sectorsAllocated = offset & 0xff
224
-
225
-
226
-
227
228
sectorsNeeded = (len (data ) + self .CHUNK_HEADER_SIZE ) / self .SECTOR_BYTES + 1
229
+
228
230
if sectorsNeeded >= 256 :
229
- return
231
+ raise ChunkTooBig ( "Chunk too big! %d bytes exceeds 1MB" % len ( data ))
230
232
231
233
if sectorNumber != 0 and sectorsAllocated >= sectorsNeeded :
232
234
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):
339
341
VERSION_DEFLATE = 2
340
342
341
343
compressMode = VERSION_DEFLATE
344
+
345
+
346
+ class ChunkTooBig (ValueError ):
347
+ pass
0 commit comments