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

Reply via email to