File tree Expand file tree Collapse file tree 2 files changed +25
-11
lines changed
Expand file tree Collapse file tree 2 files changed +25
-11
lines changed Original file line number Diff line number Diff line change @@ -88,16 +88,24 @@ func NewReader(r io.Reader) *Reader {
8888}
8989
9090// ReadMessage returns the next message from the stream or an error.
91- func (r * Reader ) ReadMessage () (* Message , error ) {
92- line , err := r .reader .ReadString ('\n' )
93- if err != nil {
94- return nil , err
91+ // It ignores empty messages.
92+ func (r * Reader ) ReadMessage () (msg * Message , err error ) {
93+ // It's valid for a message to be empty. Clients should ignore these,
94+ // so we do to be good citizens.
95+ err = ErrZeroLengthMessage
96+ for err == ErrZeroLengthMessage {
97+ var line string
98+ line , err = r .reader .ReadString ('\n' )
99+ if err != nil {
100+ return nil , err
101+ }
102+
103+ if r .DebugCallback != nil {
104+ r .DebugCallback (line )
105+ }
106+
107+ // Parse the message from our line
108+ msg , err = ParseMessage (line )
95109 }
96-
97- if r .DebugCallback != nil {
98- r .DebugCallback (line )
99- }
100-
101- // Parse the message from our line
102- return ParseMessage (line )
110+ return msg , err
103111}
Original file line number Diff line number Diff line change @@ -121,6 +121,12 @@ func TestConn(t *testing.T) {
121121 _ , err := c .ReadMessage ()
122122 assert .Equal (t , ErrMissingDataAfterPrefix , err )
123123
124+ // Ensure empty messages are ignored
125+ m = MustParseMessage ("001 test_nick" )
126+ rwc .server .WriteString ("\r \n " + m .String () + "\r \n " )
127+ m2 = testReadMessage (t , c )
128+ assert .EqualValues (t , m , m2 , "Message returned by client did not match input" )
129+
124130 // This is an odd one... if there wasn't any output, it'll hit
125131 // EOF, so we expect an error here so we can test an error
126132 // condition.
You can’t perform that action at this time.
0 commit comments