From 2f9955febd969c88966fef988fdda81e93440352 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Thu, 5 Sep 2019 19:06:09 +0800 Subject: [PATCH] No longer report JsonParseException --- .../org/jackhuang/hmcl/game/TexturesLoader.java | 3 +++ .../hmcl/download/DefaultCacheRepository.java | 14 ++++++++++++-- .../hmcl/download/game/GameInstallTask.java | 2 +- .../java/org/jackhuang/hmcl/task/TaskExecutor.java | 5 ++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java index f73fd2019..448e0c932 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java @@ -121,6 +121,9 @@ public final class TexturesLoader { try (InputStream in = Files.newInputStream(file)) { img = ImageIO.read(in); } + if (img == null) + throw new IOException("Texture is malformed"); + Map metadata = texture.getMetadata(); if (metadata == null) { metadata = emptyMap(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java index 9bf128d8f..2bbab5257 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java @@ -23,8 +23,11 @@ import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.LibraryDownloadInfo; import org.jackhuang.hmcl.util.*; import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.gson.TolerableValidationException; +import org.jackhuang.hmcl.util.gson.Validation; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.platform.OperatingSystem; +import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.file.Files; @@ -214,7 +217,7 @@ public class DefaultCacheRepository extends CacheRepository { * // assets and versions will not be included in index. * } */ - private class Index { + private class Index implements Validation { private final Set libraries; public Index() { @@ -222,12 +225,19 @@ public class DefaultCacheRepository extends CacheRepository { } public Index(Set libraries) { - this.libraries = libraries; + this.libraries = Objects.requireNonNull(libraries); } + @NotNull public Set getLibraries() { return libraries; } + + @Override + public void validate() throws JsonParseException, TolerableValidationException { + if (libraries == null) + throw new JsonParseException("Index.libraries cannot be null"); + } } private class LibraryIndex { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameInstallTask.java index 826d0a65a..531b88bce 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameInstallTask.java @@ -64,7 +64,7 @@ public class GameInstallTask extends Task { @Override public void execute() throws Exception { - Version patch = JsonUtils.GSON.fromJson(downloadTask.getResult(), Version.class) + Version patch = JsonUtils.fromNonNullJson(downloadTask.getResult(), Version.class) .setId(MINECRAFT.getPatchId()).setVersion(remote.getGameVersion()).setJar(null).setPriority(0); setResult(patch); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskExecutor.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskExecutor.java index 9a29c199c..6f1de4b82 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskExecutor.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskExecutor.java @@ -17,6 +17,7 @@ */ package org.jackhuang.hmcl.task; +import com.google.gson.JsonParseException; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.function.ExceptionalRunnable; @@ -64,7 +65,9 @@ public final class TaskExecutor { Logging.LOG.log(Level.WARNING, "An exception occurred in task execution", exception); Throwable resolvedException = resolveException(exception); - if (resolvedException instanceof RuntimeException && !(resolvedException instanceof CancellationException)) { + if (resolvedException instanceof RuntimeException && + !(resolvedException instanceof CancellationException) && + !(resolvedException instanceof JsonParseException)) { // Track uncaught RuntimeException which are thrown mostly by our mistake if (uncaughtExceptionHandler != null) uncaughtExceptionHandler.uncaughtException(Thread.currentThread(), resolvedException);