diff --git a/buffer/src/main/java/io/netty/buffer/PooledHeapByteBuf.java b/buffer/src/main/java/io/netty/buffer/PooledHeapByteBuf.java index cd1e595b60..f873dbe7cf 100644 --- a/buffer/src/main/java/io/netty/buffer/PooledHeapByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/PooledHeapByteBuf.java @@ -277,6 +277,7 @@ final class PooledHeapByteBuf extends PooledByteBuf { @Override public byte[] array() { + ensureAccessible(); return memory; } diff --git a/buffer/src/main/java/io/netty/buffer/PooledUnsafeDirectByteBuf.java b/buffer/src/main/java/io/netty/buffer/PooledUnsafeDirectByteBuf.java index a22777a05a..6e35214cf7 100644 --- a/buffer/src/main/java/io/netty/buffer/PooledUnsafeDirectByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/PooledUnsafeDirectByteBuf.java @@ -375,6 +375,7 @@ final class PooledUnsafeDirectByteBuf extends PooledByteBuf { @Override public long memoryAddress() { + ensureAccessible(); return memoryAddress; } diff --git a/buffer/src/main/java/io/netty/buffer/UnpooledUnsafeDirectByteBuf.java b/buffer/src/main/java/io/netty/buffer/UnpooledUnsafeDirectByteBuf.java index 954c320bd5..065deb9907 100644 --- a/buffer/src/main/java/io/netty/buffer/UnpooledUnsafeDirectByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/UnpooledUnsafeDirectByteBuf.java @@ -211,6 +211,7 @@ public class UnpooledUnsafeDirectByteBuf extends AbstractReferenceCountedByteBuf @Override public long memoryAddress() { + ensureAccessible(); return memoryAddress; } diff --git a/buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java b/buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java index d610087400..71f4ae9d42 100644 --- a/buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java +++ b/buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java @@ -2430,6 +2430,32 @@ public abstract class AbstractByteBufTest { releasedBuffer().nioBuffers(0, 1); } + @Test + public void testArrayAfterRelease() { + ByteBuf buf = releasedBuffer(); + if (buf.hasArray()) { + try { + buf.array(); + fail(); + } catch (IllegalReferenceCountException e) { + // expected + } + } + } + + @Test + public void testMemoryAddressAfterRelease() { + ByteBuf buf = releasedBuffer(); + if (buf.hasMemoryAddress()) { + try { + buf.memoryAddress(); + fail(); + } catch (IllegalReferenceCountException e) { + // expected + } + } + } + // Test-case trying to reproduce: // https://github.com/netty/netty/issues/2843 @Test