@@ -509,7 +509,8 @@ func (s *session) handleLogon(msg *Message) error {
509509
510510 nextSenderMsgNumAtLogonReceived := s .store .NextSenderMsgSeqNum ()
511511
512- if err := s .verifyIgnoreSeqNumTooHigh (msg ); err != nil {
512+ // Make sure this is a valid session before resetting the store.
513+ if err := s .verifyMsgAgainstAppImpl (msg ); err != nil {
513514 return err
514515 }
515516
@@ -529,6 +530,12 @@ func (s *session) handleLogon(msg *Message) error {
529530 }
530531 }
531532
533+ // Verify seq num too high but dont check against app implementation since we just did that.
534+ // Don't need to double check.
535+ if err := s .verifySelect (msg , false , true , false ); err != nil {
536+ return err
537+ }
538+
532539 if ! s .InitiateLogon {
533540 if ! s .HeartBtIntOverride {
534541 var heartBtInt FIXInt
@@ -586,18 +593,18 @@ func (s *session) initiateLogoutInReplyTo(reason string, inReplyTo *Message) (er
586593}
587594
588595func (s * session ) verify (msg * Message ) MessageRejectError {
589- return s .verifySelect (msg , true , true )
596+ return s .verifySelect (msg , true , true , true )
590597}
591598
592599func (s * session ) verifyIgnoreSeqNumTooHigh (msg * Message ) MessageRejectError {
593- return s .verifySelect (msg , false , true )
600+ return s .verifySelect (msg , false , true , true )
594601}
595602
596603func (s * session ) verifyIgnoreSeqNumTooHighOrLow (msg * Message ) MessageRejectError {
597- return s .verifySelect (msg , false , false )
604+ return s .verifySelect (msg , false , false , true )
598605}
599606
600- func (s * session ) verifySelect (msg * Message , checkTooHigh bool , checkTooLow bool ) MessageRejectError {
607+ func (s * session ) verifySelect (msg * Message , checkTooHigh bool , checkTooLow bool , checkAppImpl bool ) MessageRejectError {
601608 if reject := s .checkBeginString (msg ); reject != nil {
602609 return reject
603610 }
@@ -626,6 +633,14 @@ func (s *session) verifySelect(msg *Message, checkTooHigh bool, checkTooLow bool
626633 }
627634 }
628635
636+ if checkAppImpl {
637+ return s .verifyMsgAgainstAppImpl (msg )
638+ }
639+
640+ return nil
641+ }
642+
643+ func (s * session ) verifyMsgAgainstAppImpl (msg * Message ) MessageRejectError {
629644 if s .Validator != nil {
630645 if reject := s .Validator .Validate (msg ); reject != nil {
631646 return reject
0 commit comments