File tree 2 files changed +25
-11
lines changed
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 {
88
88
}
89
89
90
90
// 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 )
95
109
}
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
103
111
}
Original file line number Diff line number Diff line change @@ -121,6 +121,12 @@ func TestConn(t *testing.T) {
121
121
_ , err := c .ReadMessage ()
122
122
assert .Equal (t , ErrMissingDataAfterPrefix , err )
123
123
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
+
124
130
// This is an odd one... if there wasn't any output, it'll hit
125
131
// EOF, so we expect an error here so we can test an error
126
132
// condition.
You can’t perform that action at this time.
0 commit comments