@@ -115,6 +115,11 @@ class Interpreter
115115 */
116116 private $ currentGroup = '' ;
117117
118+ /**
119+ * @var string
120+ */
121+ private $ currentGroupHeader = '' ;
122+
118123 /**
119124 * Split multiple messages and process
120125 *
@@ -502,6 +507,9 @@ private function processXmlGroup(\SimpleXMLElement $elm, array &$message, int &$
502507 $ groupVisited = false ;
503508 $ newGroup = [];
504509
510+ $ this ->currentGroupHeader = $ message [$ segmentIdx ][0 ];
511+ $ this ->currentGroup = $ elm ['id ' ]->__toString ();
512+
505513 for ($ g = 0 ; $ g < $ elm ['maxrepeat ' ]; $ g ++) {
506514 $ grouptemp = [];
507515 if ($ message [$ segmentIdx ][0 ] != $ elm ->children ()[0 ]['id ' ]) {
@@ -527,8 +535,6 @@ private function processXmlGroup(\SimpleXMLElement $elm, array &$message, int &$
527535 }
528536 }
529537
530- $ this ->currentGroup = $ elm ['id ' ]->__toString ();
531-
532538 foreach ($ elm ->children () as $ elm2 ) {
533539 if ($ elm2 ->getName () == 'group ' ) {
534540 $ this ->processXmlGroup ($ elm2 , $ message , $ segmentIdx , $ grouptemp , $ errors );
@@ -562,6 +568,9 @@ private function processXmlGroup(\SimpleXMLElement $elm, array &$message, int &$
562568 $ newGroup [] = $ grouptemp ;
563569 }
564570
571+ $ this ->currentGroupHeader = '' ;
572+ $ this ->currentGroup = '' ;
573+
565574 if (\count ($ newGroup ) === 0 ) {
566575 return ;
567576 }
@@ -657,7 +666,11 @@ private function processXmlSegment(\SimpleXMLElement $elm, array &$message, int
657666
658667 // if additional segments are detected we are violating the maxrepeat attribute
659668 $ loopMove = 0 ;
660- while (isset ($ message [$ segmentIdx ]) && \call_user_func ($ this ->comparisonFunction , $ message [$ segmentIdx +$ loopMove ], $ elm )) {
669+ while (
670+ isset ($ message [$ segmentIdx ]) &&
671+ \call_user_func ($ this ->comparisonFunction , $ message [$ segmentIdx +$ loopMove ], $ elm ) &&
672+ (string )$ elm ['id ' ] !== $ this ->currentGroupHeader
673+ ) {
661674 $ errors [] = [
662675 'text ' => $ this ->messageTextConf ['TOOMANYSEGMENTS ' ].($ this ->patchFiles ? ' (skipped) ' : '' ),
663676 'position ' => $ segmentIdx ,
0 commit comments