jnh-connector: properly handle reading for one byte streams
diff --git a/connectors/jnh-connector/src/main/java/org/glassfish/jersey/jnh/connector/JavaNetHttpConnector.java b/connectors/jnh-connector/src/main/java/org/glassfish/jersey/jnh/connector/JavaNetHttpConnector.java
index 57296c6..1b19617 100644
--- a/connectors/jnh-connector/src/main/java/org/glassfish/jersey/jnh/connector/JavaNetHttpConnector.java
+++ b/connectors/jnh-connector/src/main/java/org/glassfish/jersey/jnh/connector/JavaNetHttpConnector.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2025 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -377,6 +377,7 @@
if (zero != -1) {
b[off] = (byte) (zero & 0xFF);
r = inner.read(b, off + 1, len - 1);
+ r = (r == -1) ? 1 : r + 1;
} else {
r = inner.read(b, off, len);
}
diff --git a/connectors/jnh-connector/src/test/java/org/glassfish/jersey/jnh/connector/FirstByteCachingStreamTest.java b/connectors/jnh-connector/src/test/java/org/glassfish/jersey/jnh/connector/FirstByteCachingStreamTest.java
index b6119f5..d645018 100644
--- a/connectors/jnh-connector/src/test/java/org/glassfish/jersey/jnh/connector/FirstByteCachingStreamTest.java
+++ b/connectors/jnh-connector/src/test/java/org/glassfish/jersey/jnh/connector/FirstByteCachingStreamTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2023, 2025 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -54,6 +54,19 @@
}
@Test
+ void testOneByteInArray() throws Exception {
+ ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(new byte[]{'A'});
+ InputStream testIs = createFirstByteCachingStream(byteArrayInputStream);
+ Assertions.assertEquals(1, testIs.available());
+
+ byte[] bytes = new byte[1];
+ int l = testIs.read(bytes);
+ Assertions.assertEquals(1, l);
+ Assertions.assertEquals('A', bytes[0]);
+ Assertions.assertEquals(0, testIs.available());
+ }
+
+ @Test
void testTwoBytes() throws Exception {
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(new byte[]{'A', 'B'});
InputStream testIs = createFirstByteCachingStream(byteArrayInputStream);
@@ -73,7 +86,8 @@
Assertions.assertEquals(2, testIs.available());
byte[] bytes = new byte[2];
- testIs.read(bytes);
+ int l = testIs.read(bytes);
+ Assertions.assertEquals(2, l);
Assertions.assertEquals('A', bytes[0]);
Assertions.assertEquals('B', bytes[1]);
Assertions.assertEquals(0, testIs.available());