@@ -507,6 +507,13 @@ func (s *session) handleLogon(msg *Message) error {
507507 }
508508 }
509509
510+ nextSenderMsgNumAtLogonReceived := s .store .NextSenderMsgSeqNum ()
511+
512+ // Make sure this is a valid session before resetting the store.
513+ if err := s .verifyMsgAgainstAppImpl (msg ); err != nil {
514+ return err
515+ }
516+
510517 var resetSeqNumFlag FIXBoolean
511518 if err := msg .Body .GetField (tagResetSeqNumFlag , & resetSeqNumFlag ); err == nil {
512519 if resetSeqNumFlag {
@@ -517,14 +524,14 @@ func (s *session) handleLogon(msg *Message) error {
517524 }
518525 }
519526
520- nextSenderMsgNumAtLogonReceived := s .store .NextSenderMsgSeqNum ()
521-
522527 if resetStore {
523528 if err := s .store .Reset (); err != nil {
524529 return err
525530 }
526531 }
527532
533+ // Verify seq num too high but dont check against app implementation since we just did that.
534+ // Don't need to double check.
528535 if err := s .verifyIgnoreSeqNumTooHigh (msg ); err != nil {
529536 return err
530537 }
@@ -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 , false )
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