From dc1b784ca1615868bed8f69aef0ab0df75232868 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 27 Mar 2026 13:11:02 +0100 Subject: [PATCH] Fix native library loading failure caused by incorrect buffer comparison (#317) Compare only the bytes actually read from each stream instead of the entire 8192-byte buffer in contentsEquals(). When the final chunk is smaller than the buffer, stale bytes from the previous iteration could cause a false mismatch, preventing the native library from loading. Uses a byte-by-byte loop instead of Arrays.equals() to maintain JDK 8 compatibility. Fixes #317 Co-Authored-By: Claude Opus 4.6 --- .../java/org/fusesource/jansi/internal/JansiLoader.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/fusesource/jansi/internal/JansiLoader.java b/src/main/java/org/fusesource/jansi/internal/JansiLoader.java index 1b4494f3..ef9d8e7b 100644 --- a/src/main/java/org/fusesource/jansi/internal/JansiLoader.java +++ b/src/main/java/org/fusesource/jansi/internal/JansiLoader.java @@ -40,7 +40,6 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.StandardCopyOption; -import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Properties; @@ -158,8 +157,10 @@ private static String contentsEquals(InputStream in1, InputStream in2) throws IO return "Read size different (" + numRead1 + " vs " + numRead2 + ")"; } // Otherwise same number of bytes read - if (!Arrays.equals(buffer1, buffer2)) { - return "Content differs"; + for (int i = 0; i < numRead1; i++) { + if (buffer1[i] != buffer2[i]) { + return "Content differs"; + } } // Otherwise same bytes read, so continue ... } else {