if length > d.MaxLength {
return errors.New("message too long")
}
- r := bufio.NewReader(io.LimitReader(d.R, int64(length)))
+ if length == 0 {
+ msg.Keepalive = true
+ return
+ }
+ msg.Keepalive = false
+ b := make([]byte, length)
+ _, err = io.ReadFull(d.R, b)
+ if err == io.EOF {
+ err = io.ErrUnexpectedEOF
+ return
+ }
+ if err != nil {
+ return
+ }
+ r := bytes.NewReader(b)
defer func() {
written, _ := io.Copy(ioutil.Discard, r)
if written != 0 && err == nil {
err = io.ErrUnexpectedEOF
}
}()
- if length == 0 {
- msg.Keepalive = true
- return
- }
msg.Keepalive = false
c, err := r.ReadByte()
if err != nil {