From e862a4b46be02b773107914aa31e36ac8a8b3ff2 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Sun, 28 Jul 2019 20:16:12 +0800 Subject: [PATCH] Fix #592 --- .../java/org/jackhuang/hmcl/util/CacheRepository.java | 2 +- .../java/org/jackhuang/hmcl/util/gson/JsonUtils.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java index 48076895e..61e844966 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java @@ -263,7 +263,7 @@ public class CacheRepository { try (RandomAccessFile file = new RandomAccessFile(indexFile.toFile(), "rw"); FileChannel channel = file.getChannel()) { FileLock lock = channel.lock(); try { - ETagIndex indexOnDisk = JsonUtils.GSON.fromJson(new String(IOUtils.readFullyWithoutClosing(Channels.newInputStream(channel)), UTF_8), ETagIndex.class); + ETagIndex indexOnDisk = JsonUtils.fromMaybeMalformedJson(new String(IOUtils.readFullyWithoutClosing(Channels.newInputStream(channel)), UTF_8), ETagIndex.class); Map newIndex = joinETagIndexes(indexOnDisk == null ? null : indexOnDisk.eTag, index.values()); channel.truncate(0); OutputStream os = Channels.newOutputStream(channel); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java index 03590acee..3a457a093 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java @@ -24,6 +24,7 @@ import java.util.UUID; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; /** * @author yushijinhun @@ -49,4 +50,12 @@ public final class JsonUtils { throw new JsonParseException("Json object cannot be null."); return parsed; } + + public static T fromMaybeMalformedJson(String json, Class classOfT) throws JsonParseException { + try { + return GSON.fromJson(json, classOfT); + } catch (JsonSyntaxException e) { + return null; + } + } }