From 84988aa2f6cf45c36486f40ee5307e9bc7d00998 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Fri, 25 Mar 2011 19:48:55 -0400 Subject: [PATCH] 0-byte region files no longer crash the whole program --- nbt.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/nbt.py b/nbt.py index 73730a0..075335c 100644 --- a/nbt.py +++ b/nbt.py @@ -217,12 +217,16 @@ class MCRFileReader(object): # go to the correct entry in the chunk location table self._file.seek(4 * (x + y * 32)) - # 3-byte offset in 4KiB sectors - offset_sectors = self._read_24bit_int() - - # 1-byte length in 4KiB sectors, rounded up - byte = self._file.read(1) - length_sectors = struct.unpack("B", byte)[0] + try: + # 3-byte offset in 4KiB sectors + offset_sectors = self._read_24bit_int() + + # 1-byte length in 4KiB sectors, rounded up + byte = self._file.read(1) + length_sectors = struct.unpack("B", byte)[0] + except (IndexError, struct.error): + # got a problem somewhere + return None # check for empty chunks if offset_sectors == 0 or length_sectors == 0: @@ -247,8 +251,11 @@ class MCRFileReader(object): # go to the correct entry in the chunk timestamp table self._file.seek(4 * (x + y * 32) + 4096) - bytes = self._file.read(4) - timestamp = struct.unpack(">I", bytes)[0] + try: + bytes = self._file.read(4) + timestamp = struct.unpack(">I", bytes)[0] + except (IndexError, struct.error): + return 0 return timestamp