From c3b44cee94726acfac8315a3f7c9b13fa44852db Mon Sep 17 00:00:00 2001 From: CalDescent Date: Wed, 18 Aug 2021 07:38:08 +0100 Subject: [PATCH] Fixed bugs when computing directory digest. The order was being lost when adding to the second List, which was producing different hashes on different systems. It also doesn't make sense to convert paths to lowercase, given that we want our validation to be case sensitive. --- .../java/org/qortal/arbitrary/ArbitraryDataDigest.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/qortal/arbitrary/ArbitraryDataDigest.java b/src/main/java/org/qortal/arbitrary/ArbitraryDataDigest.java index 315d79a7..58b5e444 100644 --- a/src/main/java/org/qortal/arbitrary/ArbitraryDataDigest.java +++ b/src/main/java/org/qortal/arbitrary/ArbitraryDataDigest.java @@ -10,9 +10,10 @@ import java.nio.file.Files; import java.nio.file.Path; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; public class ArbitraryDataDigest { @@ -26,8 +27,8 @@ public class ArbitraryDataDigest { } public void compute() throws IOException { - List allPaths = new ArrayList<>(); - Files.walk(path).filter(Files::isRegularFile).forEachOrdered(p -> allPaths.add(p)); + List allPaths = Files.walk(path).filter(Files::isRegularFile).collect(Collectors.toList()); + Collections.sort(allPaths); Path basePathAbsolute = this.path.toAbsolutePath(); MessageDigest sha256 = null; @@ -49,7 +50,7 @@ public class ArbitraryDataDigest { } // Hash path - byte[] filePathBytes = relativePath.toString().toLowerCase().getBytes(StandardCharsets.UTF_8); + byte[] filePathBytes = relativePath.toString().getBytes(StandardCharsets.UTF_8); sha256.update(filePathBytes); // Hash contents