This is an automated email from the ASF dual-hosted git repository.

chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fury.git


The following commit(s) were added to refs/heads/main by this push:
     new 1d4d35ea fix(java): MemoryBuffer getRemainingBytes can return 
unexpected results on a slice (#2237)
1d4d35ea is described below

commit 1d4d35ea5e4f9e4b56f2498fe37c16e20b1444ef
Author: Steven Schlansker <[email protected]>
AuthorDate: Thu May 15 20:03:48 2025 -0700

    fix(java): MemoryBuffer getRemainingBytes can return unexpected results on 
a slice (#2237)
    
    ## What does this PR do?
    
    The implementation of MemoryBuffer.getRemainingBytes, if I am
    understanding correctly, should return only the remaining bytes. On a
    sliced buffer, it returns the shared bytes, which is different than the
    remaining bytes in the slice.
---
 .../src/main/java/org/apache/fury/memory/MemoryBuffer.java    |  2 +-
 .../test/java/org/apache/fury/memory/MemoryBufferTest.java    | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git 
a/java/fury-core/src/main/java/org/apache/fury/memory/MemoryBuffer.java 
b/java/fury-core/src/main/java/org/apache/fury/memory/MemoryBuffer.java
index e5dda580..7bbcd45e 100644
--- a/java/fury-core/src/main/java/org/apache/fury/memory/MemoryBuffer.java
+++ b/java/fury-core/src/main/java/org/apache/fury/memory/MemoryBuffer.java
@@ -2447,7 +2447,7 @@ public final class MemoryBuffer {
    */
   public byte[] getRemainingBytes() {
     int length = size - readerIndex;
-    if (heapMemory != null && size == length) {
+    if (heapMemory != null && size == length && heapOffset == 0) {
       return heapMemory;
     } else {
       return getBytes(readerIndex, length);
diff --git 
a/java/fury-core/src/test/java/org/apache/fury/memory/MemoryBufferTest.java 
b/java/fury-core/src/test/java/org/apache/fury/memory/MemoryBufferTest.java
index a4dd5bd3..0ee03b71 100644
--- a/java/fury-core/src/test/java/org/apache/fury/memory/MemoryBufferTest.java
+++ b/java/fury-core/src/test/java/org/apache/fury/memory/MemoryBufferTest.java
@@ -194,6 +194,17 @@ public class MemoryBufferTest {
     }
   }
 
+  @Test
+  public void testSliceAndGetRemainingBytes() {
+    MemoryBuffer buf = MemoryBuffer.newHeapBuffer(16);
+    for (int i = 0; i < 16; i++) {
+      buf.writeByte(i);
+    }
+    byte[] sliceRemaining = buf.slice(4, 8).getRemainingBytes();
+    byte[] expected = buf.getBytes(4, 8);
+    assertEquals(sliceRemaining, expected);
+  }
+
   @Test
   public void testEqualTo() {
     MemoryBuffer buf1 = MemoryUtils.buffer(16);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to