diff --git a/record_detect.go b/record_detect.go index dc41e4e..8fe330b 100644 --- a/record_detect.go +++ b/record_detect.go @@ -34,6 +34,7 @@ func DetectPostHandshakeRecordsLens(config *Config) { if err != nil { return } + defer target.Close() if config.Xver == 1 || config.Xver == 2 { if _, err = proxyproto.HeaderProxyFromAddrs(config.Xver, target.LocalAddr(), target.RemoteAddr()).WriteTo(target); err != nil { return @@ -68,6 +69,7 @@ func DetectPostHandshakeRecordsLens(config *Config) { if err != nil { return } + defer target.Close() if config.Xver == 1 || config.Xver == 2 { if _, err = proxyproto.HeaderProxyFromAddrs(config.Xver, target.LocalAddr(), target.RemoteAddr()).WriteTo(target); err != nil { return @@ -124,6 +126,10 @@ func (c *PostHandshakeRecordDetectConn) Read(b []byte) (n int, err error) { for { if len(data) >= 5 && bytes.Equal(data[:3], []byte{23, 3, 3}) { length := int(binary.BigEndian.Uint16(data[3:5])) + 5 + // illegal dada + if length > len(data) { + break + } postHandshakeRecordsLens = append(postHandshakeRecordsLens, length) data = data[length:] } else { @@ -148,7 +154,7 @@ func (c *CCSDetectConn) Write(b []byte) (n int, err error) { defer hasAlert.Store(true) buf := make([]byte, 512) for { - _, err = c.Conn.Read(buf) + _, err := c.Conn.Read(buf) if err != nil { return }