Skip to content

Commit c855c33

Browse files
committed
Do not increment targetMsgSeqNum for out of sequence logout and test requests
1 parent 7e71cbc commit c855c33

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

in_session.go

+21-4
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,23 @@ func (state inSession) handleLogout(session *session, msg *Message) (nextState s
102102
session.log.OnEvent("Received logout response")
103103
}
104104

105-
if err := session.store.IncrNextTargetMsgSeqNum(); err != nil {
106-
session.logError(err)
107-
}
108-
109105
if session.ResetOnLogout {
110106
if err := session.dropAndReset(); err != nil {
111107
session.logError(err)
112108
}
109+
return latentState{}
110+
}
111+
112+
if err := session.checkTargetTooLow(msg); err != nil {
113+
return latentState{}
114+
}
115+
116+
if err := session.checkTargetTooHigh(msg); err != nil {
117+
return latentState{}
118+
}
119+
120+
if err := session.store.IncrNextTargetMsgSeqNum(); err != nil {
121+
session.logError(err)
113122
}
114123

115124
return latentState{}
@@ -131,6 +140,14 @@ func (state inSession) handleTestRequest(session *session, msg *Message) (nextSt
131140
}
132141
}
133142

143+
if err := session.checkTargetTooLow(msg); err != nil {
144+
return state
145+
}
146+
147+
if err := session.checkTargetTooHigh(msg); err != nil {
148+
return state
149+
}
150+
134151
if err := session.store.IncrNextTargetMsgSeqNum(); err != nil {
135152
return handleStateError(session, err)
136153
}

in_session_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,23 @@ func (s *InSessionTestSuite) TestLogoutResetOnLogout() {
9696
s.NoMessageQueued()
9797
}
9898

99+
func (s *InSessionTestSuite) TestLogoutTargetTooHigh() {
100+
s.MessageFactory.seqNum = 5
101+
102+
s.MockApp.On("FromAdmin").Return(nil)
103+
s.MockApp.On("ToAdmin")
104+
s.MockApp.On("OnLogout")
105+
s.session.fixMsgIn(s.session, s.Logout())
106+
107+
s.MockApp.AssertExpectations(s.T())
108+
s.State(latentState{})
109+
110+
s.LastToAdminMessageSent()
111+
s.MessageType(string(msgTypeLogout), s.MockApp.lastToAdmin)
112+
s.NextTargetMsgSeqNum(1)
113+
s.NextSenderMsgSeqNum(2)
114+
}
115+
99116
func (s *InSessionTestSuite) TestTimeoutNeedHeartbeat() {
100117
s.MockApp.On("ToAdmin").Return(nil)
101118
s.session.Timeout(s.session, internal.NeedHeartbeat)

0 commit comments

Comments
 (0)