[AMQ-6831, AMQ-6771] trigger eofexception on read -1 - AMQ6522Test
(cherry picked from commit e793260573f30365572a1e7507cd98e9ed17b1b5)
diff --git a/activemq-client/src/main/java/org/apache/activemq/util/ByteSequence.java b/activemq-client/src/main/java/org/apache/activemq/util/ByteSequence.java
index ac1e01a..5a19f43 100644
--- a/activemq-client/src/main/java/org/apache/activemq/util/ByteSequence.java
+++ b/activemq-client/src/main/java/org/apache/activemq/util/ByteSequence.java
@@ -75,7 +75,11 @@
public void reset() {
length = remaining();
- System.arraycopy(data, offset, data, 0, length);
+ if (length > 0) {
+ System.arraycopy(data, offset, data, 0, length);
+ } else {
+ length = 0;
+ }
offset = 0;
}
diff --git a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java
index 8e04414..67d4c86 100644
--- a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java
+++ b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java
@@ -627,7 +627,13 @@
private void ensureAvailable(ByteSequence bs, RandomAccessFile reader, int required) throws IOException {
if (bs.remaining() < required) {
bs.reset();
- bs.setLength(bs.length + reader.read(bs.data, bs.length, bs.data.length - bs.length));
+ int read = reader.read(bs.data, bs.length, bs.data.length - bs.length);
+ if (read < 0) {
+ if (bs.remaining() == 0) {
+ throw new EOFException("request for " + required + " bytes reached EOF");
+ }
+ }
+ bs.setLength(bs.length + read);
}
}