diff --git a/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/ByteCountingInputStream.java b/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/ByteCountingInputStream.java index 577170fd35a..32ba88bee90 100644 --- a/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/ByteCountingInputStream.java +++ b/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/ByteCountingInputStream.java @@ -15,7 +15,9 @@ final class ByteCountingInputStream extends InputStream { @Override public int read() throws IOException { int data = source.read(); - readBytes++; + if (data >= 0) { + readBytes++; + } return data; } diff --git a/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/ByteCountingInputStreamTest.java b/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/ByteCountingInputStreamTest.java new file mode 100644 index 00000000000..a8bfc727112 --- /dev/null +++ b/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/ByteCountingInputStreamTest.java @@ -0,0 +1,26 @@ +package com.datadog.profiling.uploader; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import org.junit.jupiter.api.Test; + +public class ByteCountingInputStreamTest { + + @Test + public void testDoesNotCountAfterEof() throws IOException { + byte[] data = {1, 2, 3}; + + ByteCountingInputStream in = new ByteCountingInputStream(new ByteArrayInputStream(data)); + for (byte datum : data) { + int b = in.read(); + assertEquals(datum, b); + } + assertEquals(data.length, (int) in.getReadBytes()); + + // read past EOF + assertEquals(-1, in.read()); + assertEquals(data.length, (int) in.getReadBytes()); + } +}