[#5773] AbstractByteBuf.forEachByteDesc(ByteProcessor) starts from wrong index
Motivation:
We introduced a regression in 1abdbe6f67
which let the iteration start from the wrong index.
Modifications:
Fix start index and add tests.
Result:
Fix regression.
This commit is contained in:
parent
6fd8bb8c63
commit
463b5cf21b
|
@ -1274,7 +1274,7 @@ public abstract class AbstractByteBuf extends ByteBuf {
|
|||
public int forEachByteDesc(ByteProcessor processor) {
|
||||
ensureAccessible();
|
||||
try {
|
||||
return forEachByteDesc0(writerIndex, readerIndex, processor);
|
||||
return forEachByteDesc0(writerIndex - 1, readerIndex, processor);
|
||||
} catch (Exception e) {
|
||||
PlatformDependent.throwException(e);
|
||||
return -1;
|
||||
|
|
|
@ -3203,6 +3203,52 @@ public abstract class AbstractByteBufTest {
|
|||
assertEquals(0, buffer2.refCnt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testForEachByteDesc2() {
|
||||
byte[] expected = {1, 2, 3, 4};
|
||||
ByteBuf buf = newBuffer(expected.length);
|
||||
try {
|
||||
buf.writeBytes(expected);
|
||||
final byte[] bytes = new byte[expected.length];
|
||||
int i = buf.forEachByteDesc(new ByteProcessor() {
|
||||
private int index = bytes.length - 1;
|
||||
|
||||
@Override
|
||||
public boolean process(byte value) throws Exception {
|
||||
bytes[index--] = value;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
assertEquals(-1, i);
|
||||
assertArrayEquals(expected, bytes);
|
||||
} finally {
|
||||
buf.release();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testForEachByte2() {
|
||||
byte[] expected = {1, 2, 3, 4};
|
||||
ByteBuf buf = newBuffer(expected.length);
|
||||
try {
|
||||
buf.writeBytes(expected);
|
||||
final byte[] bytes = new byte[expected.length];
|
||||
int i = buf.forEachByte(new ByteProcessor() {
|
||||
private int index;
|
||||
|
||||
@Override
|
||||
public boolean process(byte value) throws Exception {
|
||||
bytes[index++] = value;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
assertEquals(-1, i);
|
||||
assertArrayEquals(expected, bytes);
|
||||
} finally {
|
||||
buf.release();
|
||||
}
|
||||
}
|
||||
|
||||
private static void assertTrueAndRelease(ByteBuf buf, boolean actual) {
|
||||
try {
|
||||
assertTrue(actual);
|
||||
|
|
|
@ -126,6 +126,18 @@ public class SlicedByteBufTest extends AbstractByteBufTest {
|
|||
// ignore for SlicedByteBuf
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testForEachByteDesc2() {
|
||||
// Ignore for SlicedByteBuf
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testForEachByte2() {
|
||||
// Ignore for SlicedByteBuf
|
||||
}
|
||||
|
||||
@Test(expected = UnsupportedOperationException.class)
|
||||
@Override
|
||||
public void testDuplicateCapacityChange() {
|
||||
|
|
|
@ -123,4 +123,16 @@ public class WrappedUnpooledUnsafeByteBufTest extends BigEndianUnsafeDirectByteB
|
|||
public void testLittleEndianWithExpand() {
|
||||
super.testLittleEndianWithExpand();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testForEachByteDesc2() {
|
||||
// Ignore
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testForEachByte2() {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user