From c2209d68f7079f0c4f0251395ccc59926d8770b4 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Tue, 4 Nov 2025 18:54:33 +0800 Subject: [PATCH] fix: vision panic with dialer-proxy https://github.com/MetaCubeX/mihomo/issues/2334 --- common/net/sing.go | 2 ++ transport/vless/vision/conn.go | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/common/net/sing.go b/common/net/sing.go index 72bfd972..df07bf98 100644 --- a/common/net/sing.go +++ b/common/net/sing.go @@ -24,6 +24,8 @@ var WriteBuffer = bufio.WriteBuffer type ReadWaitOptions = network.ReadWaitOptions var NewReadWaitOptions = network.NewReadWaitOptions +var CalculateFrontHeadroom = network.CalculateFrontHeadroom +var CalculateRearHeadroom = network.CalculateRearHeadroom type ReaderWithUpstream = network.ReaderWithUpstream type WithUpstreamReader = network.WithUpstreamReader diff --git a/transport/vless/vision/conn.go b/transport/vless/vision/conn.go index 4e62b153..a4d236c1 100644 --- a/transport/vless/vision/conn.go +++ b/transport/vless/vision/conn.go @@ -242,14 +242,26 @@ func (vc *Conn) WriteBuffer(buffer *buf.Buffer) (err error) { } func (vc *Conn) FrontHeadroom() int { + fontHeadroom := PaddingHeaderLen - uuid.Size if vc.readFilterUUID || vc.writeOnceUserUUID != nil { - return PaddingHeaderLen + fontHeadroom = PaddingHeaderLen } - return PaddingHeaderLen - uuid.Size + if vc.writeFilterApplicationData { // The writer may be replaced, add the required value for vc.netConn + if abs := N.CalculateFrontHeadroom(vc.netConn) - N.CalculateFrontHeadroom(vc.Conn); abs > 0 { + fontHeadroom += abs + } + } + return fontHeadroom } func (vc *Conn) RearHeadroom() int { - return 500 + 900 + rearHeadroom := 500 + 900 + if vc.writeFilterApplicationData { // The writer may be replaced, add the required value for vc.netConn + if abs := N.CalculateRearHeadroom(vc.netConn) - N.CalculateRearHeadroom(vc.Conn); abs > 0 { + rearHeadroom += abs + } + } + return rearHeadroom } func (vc *Conn) NeedHandshake() bool {