From e1986a4d31ca33c087a72ab4644aef1295693b69 Mon Sep 17 00:00:00 2001 From: hexonal Date: Tue, 8 Sep 2026 00:58:12 -0400 Subject: [PATCH] fix: DetectPostHandshakeRecordsLens background probe bugs (panic, leak, race) (#36) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 风扇滑翔翼 --- record_detect.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 }