[
https://issues.apache.org/jira/browse/CODEC-259?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tomas Shestakov updated CODEC-259:
----------------------------------
Description:
java.nio.ByteBuffer support in org.apache.commons.codec.binary.Hex does not
work properly for direct ByteBuffer created by ByteBuffer.allocateDirect method
and for heap ByteBuffers which arrayOffset() or byteBuffer.position() greater
than zero or byteBuffer.remaining() is not equal
byteBuffer.array().{color:#660e7a}length{color}:
This test will produce java.lang.UnsupportedOperationException
{code:java}
@Test
public void testEncodeHexByteBufferEmpty() {
assertTrue(Arrays.equals(new char[0],
Hex.encodeHex(ByteBuffer.allocateDirect(0))));
}
{code}
This one will fail
{code:java}
@Test
public void testEncodeHexByteBufferHelloWorldLowerCaseHex() {
final ByteBuffer b = ByteBuffer.wrap(StringUtils.getBytesUtf8("[Hello
World]"), 1, 11);
final String expected = "48656c6c6f20576f726c64";
char[] actual;
actual = Hex.encodeHex(b);
assertEquals(expected, new String(actual));
actual = Hex.encodeHex(b, true);
assertEquals(expected, new String(actual));
actual = Hex.encodeHex(b, false);
assertFalse(expected.equals(new String(actual)));
}
{code}
was:
java.nio.ByteBuffer support in org.apache.commons.codec.binary.Hex does not
work properly for direct ByteBuffer created by ByteBuffer.allocateDirect method
and for heap ByteBuffers which arrayOffset() or byteBuffer.position() greater
than zero:
This test will produce java.lang.UnsupportedOperationException
{code:java}
@Test
public void testEncodeHexByteBufferEmpty() {
assertTrue(Arrays.equals(new char[0],
Hex.encodeHex(ByteBuffer.allocateDirect(0))));
}
{code}
This one will fail
{code:java}
@Test
public void testEncodeHexByteBufferHelloWorldLowerCaseHex() {
final ByteBuffer b = ByteBuffer.wrap(StringUtils.getBytesUtf8("[Hello
World]"), 1, 11);
final String expected = "48656c6c6f20576f726c64";
char[] actual;
actual = Hex.encodeHex(b);
assertEquals(expected, new String(actual));
actual = Hex.encodeHex(b, true);
assertEquals(expected, new String(actual));
actual = Hex.encodeHex(b, false);
assertFalse(expected.equals(new String(actual)));
}
{code}
> Broken direct java.nio.ByteBuffer support in
> org.apache.commons.codec.binary.Hex
> --------------------------------------------------------------------------------
>
> Key: CODEC-259
> URL: https://issues.apache.org/jira/browse/CODEC-259
> Project: Commons Codec
> Issue Type: Bug
> Affects Versions: 1.11, 1.12
> Reporter: Tomas Shestakov
> Priority: Major
> Fix For: 1.13
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> java.nio.ByteBuffer support in org.apache.commons.codec.binary.Hex does not
> work properly for direct ByteBuffer created by ByteBuffer.allocateDirectÂ
> method and for heap ByteBuffers which arrayOffset() or byteBuffer.position()
> greater than zero or byteBuffer.remaining() is not equal
> byteBuffer.array().{color:#660e7a}length{color}:
> This test will produce java.lang.UnsupportedOperationException
> {code:java}
> @Test
> public void testEncodeHexByteBufferEmpty() {
> assertTrue(Arrays.equals(new char[0],
> Hex.encodeHex(ByteBuffer.allocateDirect(0))));
> }
> {code}
> This one will fail
> {code:java}
> @Test
> public void testEncodeHexByteBufferHelloWorldLowerCaseHex() {
> final ByteBuffer b = ByteBuffer.wrap(StringUtils.getBytesUtf8("[Hello
> World]"), 1, 11);
> final String expected = "48656c6c6f20576f726c64";
> char[] actual;
> actual = Hex.encodeHex(b);
> assertEquals(expected, new String(actual));
> actual = Hex.encodeHex(b, true);
> assertEquals(expected, new String(actual));
> actual = Hex.encodeHex(b, false);
> assertFalse(expected.equals(new String(actual)));
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)