From c1f4bb2751c9b7cc6da07556b7ae87d594aa5ad5 Mon Sep 17 00:00:00 2001 From: Oliver Wolff <23139298+cuioss@users.noreply.github.com> Date: Tue, 7 Jul 2026 17:53:48 +0200 Subject: [PATCH 1/2] fix(codeql): resolve fixable CodeQL findings - FileLoaderUtility: copy input stream directly instead of wrapping in an unclosed BufferedInputStream (java/input-resource-leak) - TestDataGenerator: use long loop counter to avoid int/long comparison (java/comparison-with-wider-type) - CollectionLiteralsTest: use String.isEmpty() instead of comparing to "" (java/inefficient-empty-string-test) - FileSystemLoaderTest: create temp file via Files.createTempFile with secure default permissions (java/local-temp-file...-information-disclosure) Co-Authored-By: Claude --- src/main/java/de/cuioss/tools/io/FileLoaderUtility.java | 3 +-- .../java/de/cuioss/tools/collect/CollectionLiteralsTest.java | 2 +- src/test/java/de/cuioss/tools/io/FileSystemLoaderTest.java | 3 ++- src/test/java/de/cuioss/tools/support/TestDataGenerator.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/cuioss/tools/io/FileLoaderUtility.java b/src/main/java/de/cuioss/tools/io/FileLoaderUtility.java index a1271316..b4a493ae 100644 --- a/src/main/java/de/cuioss/tools/io/FileLoaderUtility.java +++ b/src/main/java/de/cuioss/tools/io/FileLoaderUtility.java @@ -18,7 +18,6 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; -import java.io.BufferedInputStream; import java.io.IOException; import java.io.StringWriter; import java.nio.charset.Charset; @@ -99,7 +98,7 @@ public static Path copyFileToTemp(final FileLoader source, final boolean markDel final Path target = PathTraversalSecurity.createSecureTempFile(namePart, null != suffix ? "." + suffix : null); try (final var inputStream = source.inputStream()) { - Files.copy(new BufferedInputStream(inputStream), target, StandardCopyOption.REPLACE_EXISTING); + Files.copy(inputStream, target, StandardCopyOption.REPLACE_EXISTING); } if (markDeleteOnExit) { target.toFile().deleteOnExit(); diff --git a/src/test/java/de/cuioss/tools/collect/CollectionLiteralsTest.java b/src/test/java/de/cuioss/tools/collect/CollectionLiteralsTest.java index 7202a5bc..e19f076d 100644 --- a/src/test/java/de/cuioss/tools/collect/CollectionLiteralsTest.java +++ b/src/test/java/de/cuioss/tools/collect/CollectionLiteralsTest.java @@ -284,7 +284,7 @@ void shouldCopySourceMapForImmutableMap() { @DisplayName("Should handle stream to immutable map conversion") void shouldHandleStreamToImmutableMap() { final Map result = immutableMap( - immutableMap("1", "1-1", "2", "").entrySet().stream().filter(entry -> !"".equals(entry.getValue()))); + immutableMap("1", "1-1", "2", "").entrySet().stream().filter(entry -> !entry.getValue().isEmpty())); assertEquals(1, result.size()); assertTrue(result.containsKey("1")); } diff --git a/src/test/java/de/cuioss/tools/io/FileSystemLoaderTest.java b/src/test/java/de/cuioss/tools/io/FileSystemLoaderTest.java index 54fc33f1..89f722b7 100644 --- a/src/test/java/de/cuioss/tools/io/FileSystemLoaderTest.java +++ b/src/test/java/de/cuioss/tools/io/FileSystemLoaderTest.java @@ -18,6 +18,7 @@ import org.junit.jupiter.api.Test; import java.io.File; +import java.nio.file.Files; import java.nio.file.Path; import static org.junit.jupiter.api.Assertions.*; @@ -136,7 +137,7 @@ void shouldFailToLoadNotExistingFile() { @Test void shouldHandleOutputStreamForWritableFile() throws Exception { // Create a temporary file for testing - File tempFile = File.createTempFile("test", ".txt"); + File tempFile = Files.createTempFile("test", ".txt").toFile(); tempFile.deleteOnExit(); var loader = new FileSystemLoader(tempFile.getAbsolutePath()); diff --git a/src/test/java/de/cuioss/tools/support/TestDataGenerator.java b/src/test/java/de/cuioss/tools/support/TestDataGenerator.java index 828f0ea3..b8b7cc5c 100644 --- a/src/test/java/de/cuioss/tools/support/TestDataGenerator.java +++ b/src/test/java/de/cuioss/tools/support/TestDataGenerator.java @@ -54,7 +54,7 @@ public Class getType() { } private static void generateTestData(final OutputStream out, final long size) throws IOException { - for (var i = 0; i < size; i++) { + for (long i = 0; i < size; i++) { // nice varied byte pattern compatible with Readers and Writers out.write((byte) (i % 127 + 1)); } From d25b9b0aa78d68276afaac4d0cc55675585e21ae Mon Sep 17 00:00:00 2001 From: Oliver Wolff <23139298+cuioss@users.noreply.github.com> Date: Tue, 7 Jul 2026 18:01:42 +0200 Subject: [PATCH 2/2] test(io): use JUnit @TempDir for writable-file test Address PR review: replace manual createTempFile + deleteOnExit with a JUnit-managed @TempDir so the temp file lifecycle is handled automatically. Co-Authored-By: Claude --- .../java/de/cuioss/tools/io/FileSystemLoaderTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/de/cuioss/tools/io/FileSystemLoaderTest.java b/src/test/java/de/cuioss/tools/io/FileSystemLoaderTest.java index 89f722b7..d63e7073 100644 --- a/src/test/java/de/cuioss/tools/io/FileSystemLoaderTest.java +++ b/src/test/java/de/cuioss/tools/io/FileSystemLoaderTest.java @@ -16,6 +16,7 @@ package de.cuioss.tools.io; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import java.io.File; import java.nio.file.Files; @@ -135,10 +136,9 @@ void shouldFailToLoadNotExistingFile() { } @Test - void shouldHandleOutputStreamForWritableFile() throws Exception { - // Create a temporary file for testing - File tempFile = Files.createTempFile("test", ".txt").toFile(); - tempFile.deleteOnExit(); + void shouldHandleOutputStreamForWritableFile(@TempDir Path tempDir) throws Exception { + // Create a temporary file inside the JUnit-managed temp directory (auto-cleaned) + File tempFile = Files.createFile(tempDir.resolve("test.txt")).toFile(); var loader = new FileSystemLoader(tempFile.getAbsolutePath()); assertTrue(loader.isWritable());