소스 검색

Correctly deal with partial messages ending message sets

Evan Huus 12 년 전
부모
커밋
7fd3c6a543
1개의 변경된 파일6개의 추가작업 그리고 3개의 파일을 삭제
  1. 6 3
      protocol/message_set.go

+ 6 - 3
protocol/message_set.go

@@ -53,10 +53,13 @@ func (ms *MessageSet) decode(pd packetDecoder) (err error) {
 	for pd.remaining() > 0 {
 	for pd.remaining() > 0 {
 		msb := new(MessageBlock)
 		msb := new(MessageBlock)
 		err = msb.decode(pd)
 		err = msb.decode(pd)
-		if err != nil {
-			return err
+		if err == nil {
+			ms.Messages = append(ms.Messages, msb)
+		} else {
+			// As an optimization the server is allowed to return a partial message at the
+			// end of the message set. Clients should handle this case. So we just ignore such things.
+			break
 		}
 		}
-		ms.Messages = append(ms.Messages, msb)
 	}
 	}
 
 
 	return nil
 	return nil