@@ -123,10 +123,34 @@ func (header *Header) TLVs() ([]TLV, error) {
123123// Also, this operation will block until enough bytes are available for peeking.
124124func Read (reader * bufio.Reader ) (* Header , error ) {
125125 // In order to improve speed for small non-PROXYed packets, take a peek at the first byte alone.
126- if b1 , err := reader .Peek (1 ); err == nil && (bytes .Equal (b1 [:1 ], SIGV1 [:1 ]) || bytes .Equal (b1 [:1 ], SIGV2 [:1 ])) {
127- if signature , err := reader .Peek (5 ); err == nil && bytes .Equal (signature [:5 ], SIGV1 ) {
126+ b1 , err := reader .Peek (1 )
127+ if err != nil {
128+ if err == io .EOF {
129+ return nil , ErrNoProxyProtocol
130+ }
131+ return nil , err
132+ }
133+
134+ if bytes .Equal (b1 [:1 ], SIGV1 [:1 ]) || bytes .Equal (b1 [:1 ], SIGV2 [:1 ]) {
135+ signature , err := reader .Peek (5 )
136+ if err != nil {
137+ if err == io .EOF {
138+ return nil , ErrNoProxyProtocol
139+ }
140+ return nil , err
141+ }
142+ if bytes .Equal (signature [:5 ], SIGV1 ) {
128143 return parseVersion1 (reader )
129- } else if signature , err := reader .Peek (12 ); err == nil && bytes .Equal (signature [:12 ], SIGV2 ) {
144+ }
145+
146+ signature , err = reader .Peek (12 )
147+ if err != nil {
148+ if err == io .EOF {
149+ return nil , ErrNoProxyProtocol
150+ }
151+ return nil , err
152+ }
153+ if bytes .Equal (signature [:12 ], SIGV2 ) {
130154 return parseVersion2 (reader )
131155 }
132156 }
0 commit comments