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

Torsten Mielke commented on CAMEL-25137:
----------------------------------------

I will have a closer look...

> ArrayIndexOutOfBoundsException: Index -1 when MLLP message starts with 
> segment delimiter
> ----------------------------------------------------------------------------------------
>
>                 Key: CAMEL-25137
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25137
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-mllp
>            Reporter: Daisuke Kanai
>            Assignee: Torsten Mielke
>            Priority: Minor
>
> When MllpTcpServerConsumer receives an MLLP payload where the very first byte 
> is a segment delimiter (0x0D / \r), populateHl7DataHeaders fails with 
> java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds.
> While a leading segment delimiter represents an invalid/malformed HL7 
> message, the MLLP transport layer should handle malformed payloads gracefully 
> (e.g., throwing a controlled MllpException or passing it to downstream error 
> handlers) rather than crashing with an unhandled runtime exception.
>  
> {code:java}
>  java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 
> 889 at 
> org.apache.camel.component.mllp.MllpTcpServerConsumer.populateHl7DataHeaders(MllpTcpServerConsumer.java:387)
>  at 
> org.apache.camel.component.mllp.MllpTcpServerConsumer.processMessage(MllpTcpServerConsumer.java:295)
>  at 
> org.apache.camel.component.mllp.internal.TcpSocketConsumerRunnable.run(TcpSocketConsumerRunnable.java:167){code}
>  
>  
> In MllpTcpServerConsumer.java (around line 387):
> {code:java}
> for (int i = 0; i < hl7MessageBytes.length; ++i) {
>     if (fieldSeparator == hl7MessageBytes[i]) {
>         fieldSeparatorIndexes.add(i);
>     } else if (MllpProtocolConstants.SEGMENT_DELIMITER == hl7MessageBytes[i]) 
> {
>         // If the MSH Segment doesn't have a trailing field separator, add 
> one so the field can be extracted into a header
>         if (fieldSeparator != hl7MessageBytes[i - 1]) {
>             fieldSeparatorIndexes.add(i);
>         }
>         endOfMSH = i;
>         break;
>     }
> } {code}
>  
> When the payload starts with SEGMENT_DELIMITER (\r), the loop enters the 
> else-if block at i = 0. Evaluating hl7MessageBytes[i - 1] attempts to access 
> hl7MessageBytes[-1], triggering ArrayIndexOutOfBoundsException.
> Additionally, hardcoding hl7MessageBytes[3] as the fieldSeparator assumes the 
> payload strictly begins with MSH|. If leading garbage/delimiters are present, 
> this index misaligns and causes secondary parsing failures.
> While a message not starting with 'MSH' is strictly non-compliant with the 
> HL7 specification, I wanted to share this finding as receiving an unhandled 
> java.lang.ArrayIndexOutOfBoundsException seemed like an unintended behavior.



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

Reply via email to