[ 
https://issues.apache.org/jira/browse/CAMEL-24936?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on CAMEL-24936 started by Andrea Cosentino.
------------------------------------------------
> camel-netty: NettyConverter.toByteArray should copy only the readable bytes 
> of the ByteBuf
> ------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24936
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24936
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-netty
>            Reporter: Andrea Cosentino
>            Assignee: Andrea Cosentino
>            Priority: Minor
>
> {code:java}
> if (buffer.hasArray()) {
>     return buffer.array();
> }
> {code}
> NettyConverter.toByteArray(ByteBuf, Exchange) has a fast path (above) that 
> returns buffer.array() directly for array-backed buffers. buffer.array() 
> returns the whole backing array of the ByteBuf, which does not necessarily 
> correspond to the buffer's readable region: it ignores arrayOffset(), 
> readerIndex() and readableBytes(). For array-backed buffers this can return 
> more bytes than the buffer actually holds (and, with shared/pooled backing 
> arrays, bytes outside this buffer's own slice), and it also hands out a 
> direct reference to a buffer that may be pooled and later reused.
> The non-array branch already does the correct thing (copies exactly 
> readableBytes() starting at readerIndex()). The array branch should behave 
> the same way.
> Proposed change - drop the hasArray() shortcut and always copy exactly the 
> readable region:
> {code:java}
> byte[] bytes = new byte[buffer.readableBytes()];
> buffer.getBytes(buffer.readerIndex(), bytes);
> return bytes;
> {code}
> This keeps the conversion consistent regardless of the underlying allocator 
> (heap vs direct, pooled vs unpooled) and avoids returning bytes outside the 
> readable region. The shared converter is also used by camel-netty-http, 
> camel-hl7, camel-lumberjack and camel-syslog, so the fix benefits all of them.
> Add a regression test that converts an array-backed (heap) ByteBuf whose 
> readable region is a subset of its backing array and asserts only the 
> readable bytes are returned.
> Affected: NettyConverter.toByteArray in camel-netty (main, 4.22.x, 4.18.x).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to