[
https://issues.apache.org/jira/browse/CAMEL-26481?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18136463#comment-18136463
]
Andrea Cosentino commented on CAMEL-26481:
------------------------------------------
Backport PRs opened:
- `camel-4.22.x` (4.22.3) via PR https://github.com/apache/camel/pull/28869
- `camel-4.18.x` (4.18.6) via PR https://github.com/apache/camel/pull/28870
_Claude Code on behalf of oscerd_
> camel-syslog: Rfc5425FrameDecoder should handle fragmented length fields
> ------------------------------------------------------------------------
>
> Key: CAMEL-26481
> URL: https://issues.apache.org/jira/browse/CAMEL-26481
> Project: Camel
> Issue Type: Improvement
> Components: camel-syslog
> Reporter: Andrea Cosentino
> Assignee: Andrea Cosentino
> Priority: Major
> Fix For: 4.18.6, 4.22.3, 4.24.0
>
>
> h3. Current behaviour
> In {{camel-syslog}}, {{Rfc5425FrameDecoder}} decodes octet-counting frames
> over Netty TCP connections.
> When incoming bytes end inside a length field before the space delimiter (for
> instance when a TCP segment ends after frame content and contains only
> initial digits of the next frame length):
> * {{indexOf(in, ' ')}} returns {{-1}}.
> * {{lengthbuffer}} remains empty, causing {{Integer.parseInt("")}} to throw a
> {{NumberFormatException}}.
> * The decoder catches the exception and executes {{in.resetReaderIndex()}}.
> Because {{in.markReaderIndex()}} is not set after completing earlier frames,
> {{in.resetReaderIndex()}} rewinds {{readerIndex}} back to index 0 of the
> Netty cumulation buffer, causing the decoder to re-process and re-emit
> previously decoded frames repeatedly.
> Additionally, {{in.readBytes(index)}} allocates a buffer that is not released.
> h3. Expected behaviour
> {{Rfc5425FrameDecoder}} should verify that the space delimiter has arrived
> before parsing the length field. If the delimiter has not arrived yet, it
> should wait for additional data without modifying or resetting the reader
> index. It should also read the length value without allocating unreleased
> buffers.
> h3. Change
> * In {{Rfc5425FrameDecoder.decode}}:
> - Check if the space delimiter is present before parsing the length field;
> if absent, return immediately without altering {{readerIndex}}.
> - Parse length digits directly from the buffer without allocating
> unreleased {{ByteBuf}} instances.
> - Advance {{readerIndex}} past the length and delimiter once confirmed.
> * Add unit tests in {{camel-syslog}} verifying that fragmented streams ending
> within length fields decode frames correctly in sequence.
> h3. Tests
> * Unit test in {{components/camel-syslog}} using {{EmbeddedChannel}}
> verifying sequential decoding across fragmented stream chunks.
> * Ensure all existing tests in {{camel-syslog}} continue to pass.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)