From b6dbef709554b9d123d48d5e5b2831f28958ee01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 20 Feb 2015 21:11:28 +0100 Subject: [PATCH] Wrap external NBT loading with try-catch to avoid corrupting block if external NBT data is corrupt. Closes #926. --- src/main/scala/li/cil/oc/common/SaveHandler.scala | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/common/SaveHandler.scala b/src/main/scala/li/cil/oc/common/SaveHandler.scala index b16a850d4..c7fb5b454 100644 --- a/src/main/scala/li/cil/oc/common/SaveHandler.scala +++ b/src/main/scala/li/cil/oc/common/SaveHandler.scala @@ -83,11 +83,16 @@ object SaveHandler { def loadNBT(nbt: NBTTagCompound, name: String): NBTTagCompound = { val data = load(nbt, name) - if (data.length > 0) { + if (data.length > 0) try { val bais = new ByteArrayInputStream(data) val dis = new DataInputStream(bais) CompressedStreamTools.read(dis) } + catch { + case t: Throwable => + OpenComputers.log.warn("There was an error trying to restore a block's state from external data. This indicates that data was somehow corrupted.", t) + new NBTTagCompound() + } else new NBTTagCompound() }