@@ -55,13 +55,10 @@ func (r *Reader) Reset(rd io.Reader) {
55
55
}
56
56
57
57
func (r * Reader ) ReadLine () ([]byte , error ) {
58
- line , err := r .rd . ReadBytes ( '\n' )
59
- if err != nil && err != io . EOF {
58
+ line , err := r .readLine ( )
59
+ if err != nil {
60
60
return nil , err
61
61
}
62
- if len (line ) == 0 {
63
- return nil , fmt .Errorf ("redis: reply is empty" )
64
- }
65
62
if isNilReply (line ) {
66
63
return nil , Nil
67
64
}
@@ -72,15 +69,29 @@ func (r *Reader) ReadLine() ([]byte, error) {
72
69
// - there is a pending read error;
73
70
// - or line does not end with \r\n.
74
71
func (r * Reader ) readLine () ([]byte , error ) {
75
- b , err := r .rd .ReadSlice ('\n' )
76
- if err != nil {
77
- return nil , err
78
- }
79
- if len (b ) <= 2 || b [len (b )- 1 ] != '\n' || b [len (b )- 2 ] != '\r' {
80
- return nil , fmt .Errorf ("redis: invalid reply: %q" , b )
72
+ var s []byte
73
+ multi := false
74
+ for {
75
+ b , err := r .rd .ReadSlice ('\n' )
76
+ if err != nil {
77
+ // in case the end of the buffer is not reached
78
+ if err == bufio .ErrBufferFull {
79
+ s = append (s , b ... )
80
+ multi = true
81
+ continue
82
+ } else {
83
+ return nil , err
84
+ }
85
+ }
86
+ if len (b ) <= 2 || b [len (b )- 1 ] != '\n' || b [len (b )- 2 ] != '\r' {
87
+ return nil , fmt .Errorf ("redis: invalid reply: %q" , b )
88
+ }
89
+ if multi {
90
+ b = append (s , b ... )
91
+ }
92
+ b = b [:len (b )- 2 ]
93
+ return b , nil
81
94
}
82
- b = b [:len (b )- 2 ]
83
- return b , nil
84
95
}
85
96
86
97
func (r * Reader ) ReadReply (m MultiBulkParse ) (interface {}, error ) {
0 commit comments