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 88c3e1bd94..25b8e2a618 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java @@ -181,7 +181,7 @@ public Optional getLibrary(Library library) { */ public Path cacheLibrary(Library library, Path path, boolean forge) throws IOException { String hash = library.getDownload().getSha1(); - if (hash == null) + if (!DigestUtils.isSha1Digest(hash)) hash = DigestUtils.digestToString(SHA1, path); Path cache = getFile(SHA1, hash); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java index ecc141a732..2800bab09f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java @@ -246,7 +246,7 @@ public void close() throws IOException { handler.checkIntegrity(temp, file); } - if (checksum != null) { + if (checksum != null && !checksum.isEmpty()) { String actualChecksum = HexFormat.of().formatHex(digest.digest()); if (!checksum.equalsIgnoreCase(actualChecksum)) { throw new ChecksumMismatchException(algorithm, checksum, actualChecksum); 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 48fbcdc7c7..84e5b689bc 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java @@ -101,7 +101,7 @@ protected Path getFile(String algorithm, String hash) { } protected boolean fileExists(String algorithm, String hash) { - if (hash == null) return false; + if (!DigestUtils.isSha1Digest(hash)) return false; Path file = getFile(algorithm, hash); if (Files.exists(file)) { try { @@ -114,13 +114,23 @@ protected boolean fileExists(String algorithm, String hash) { } } + private void checkHash(String hash) throws IOException { + if (!DigestUtils.isSha1Digest(hash)) { + throw new IOException("Not SHA-1 checksum: " + hash); + } + } + public void tryCacheFile(Path path, String algorithm, String hash) throws IOException { + checkHash(hash); + Path cache = getFile(algorithm, hash); if (Files.isRegularFile(cache)) return; FileUtils.copyFile(path, cache); } public Path cacheFile(Path path, String algorithm, String hash) throws IOException { + checkHash(hash); + Path cache = getFile(algorithm, hash); FileUtils.copyFile(path, cache); return cache;