You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Tomas Shestakov (JIRA)" <ji...@apache.org> on 2019/07/21 06:41:00 UTC

[jira] [Commented] (CODEC-259) Broken direct java.nio.ByteBuffer support in org.apache.commons.codec.binary.Hex

    [ https://issues.apache.org/jira/browse/CODEC-259?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16889659#comment-16889659 ] 

Tomas Shestakov commented on CODEC-259:
---------------------------------------

Fixed only for DirectBuffer. But fails for HeapByteBuffer which arrayOffset() or byteBuffer.position() greater than zero or byteBuffer.remaining() is not equal byteBuffer.array().{color:#660e7a}length{color}:

 
{code:java}
@Test
public void testEncodeHexByteBufferEmpty() {
    ByteBuffer zeroCapacity = allocate(0);
    ByteBuffer tenCapacity = allocate(10);
    tenCapacity.flip();
    assertEquals(zeroCapacity, tenCapacity);
    assertTrue(Arrays.equals(new char[0], Hex.encodeHex(zeroCapacity)));
    assertTrue(Arrays.equals(new char[0], Hex.encodeHex(tenCapacity)));
}
{code}
zeroCapacity and tenCapacity buffers are equal but Hex.encodeHex(zeroCapacity)) is not equal Hex.encodeHex(tenCapacity))

 

> 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)