From 2f2fe54d0f0d9baabc5679a043249a77aa6e7027 Mon Sep 17 00:00:00 2001 From: Fangliding Date: Sat, 26 Sep 2026 16:52:40 +0800 Subject: [PATCH] bug fix --- infra/conf/shadowsocks.go | 3 +++ proxy/shadowsocks_2022/inbound_multi.go | 4 +--- proxy/shadowsocks_2022/relay_test.go | 3 +-- proxy/shadowsocks_2022/replay.go | 3 +-- proxy/shadowsocks_2022/stream.go | 8 ++++---- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/infra/conf/shadowsocks.go b/infra/conf/shadowsocks.go index 9032dad3f..13862dd83 100644 --- a/infra/conf/shadowsocks.go +++ b/infra/conf/shadowsocks.go @@ -109,12 +109,14 @@ func (v *ShadowsocksServerConfig) Build() (proto.Message, error) { } func buildShadowsocks2022(v *ShadowsocksServerConfig) (proto.Message, error) { + v.Cipher = strings.ToLower(v.Cipher) if len(v.Users) == 0 { config := new(shadowsocks_2022.ServerConfig) config.Method = v.Cipher config.Key = v.Password config.Network = v.NetworkList.Build() config.Email = v.Email + config.Level = int32(v.Level) return config, nil } @@ -169,6 +171,7 @@ func buildShadowsocks2022(v *ShadowsocksServerConfig) (proto.Message, error) { Email: user.Email, Address: user.Address.Build(), Port: uint32(user.Port), + Level: int32(user.Level), }) } return config, nil diff --git a/proxy/shadowsocks_2022/inbound_multi.go b/proxy/shadowsocks_2022/inbound_multi.go index 6a8251bb8..45df40e53 100644 --- a/proxy/shadowsocks_2022/inbound_multi.go +++ b/proxy/shadowsocks_2022/inbound_multi.go @@ -431,8 +431,6 @@ func (i *MultiUserInbound) processUDP(ctx context.Context, conn stat.Connection, } payload := bodyPlain[offset+addrLen:] - payloadCopy := make([]byte, len(payload)) - copy(payloadCopy, payload) entry, ok := udpConns.Load(sessionID) if !ok { @@ -496,7 +494,7 @@ func (i *MultiUserInbound) processUDP(ctx context.Context, conn stat.Connection, entry.timer.Update() pBuf := buf.New() - pBuf.Write(payloadCopy) + pBuf.Write(payload) _ = entry.link.Writer.WriteMultiBuffer(buf.MultiBuffer{pBuf}) } } diff --git a/proxy/shadowsocks_2022/relay_test.go b/proxy/shadowsocks_2022/relay_test.go index 26834ece5..c981e5d73 100644 --- a/proxy/shadowsocks_2022/relay_test.go +++ b/proxy/shadowsocks_2022/relay_test.go @@ -4,14 +4,13 @@ import ( "context" "encoding/base64" "encoding/binary" + "errors" gonet "net" "sync" "sync/atomic" "testing" "time" - "errors" - "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/net" diff --git a/proxy/shadowsocks_2022/replay.go b/proxy/shadowsocks_2022/replay.go index eb59bae0b..7908371ba 100644 --- a/proxy/shadowsocks_2022/replay.go +++ b/proxy/shadowsocks_2022/replay.go @@ -25,8 +25,7 @@ type SlidingWindow struct { } func (f *SlidingWindow) Reset() { - f.last = 0 - f.ring[0] = 0 + *f = SlidingWindow{} } func (f *SlidingWindow) Check(counter uint64) bool { diff --git a/proxy/shadowsocks_2022/stream.go b/proxy/shadowsocks_2022/stream.go index b515df2da..3e21734e7 100644 --- a/proxy/shadowsocks_2022/stream.go +++ b/proxy/shadowsocks_2022/stream.go @@ -6,7 +6,7 @@ import ( "encoding/binary" "io" "math" - mrand "math/rand" + mrand "math/rand/v2" "time" "github.com/xtls/xray-core/common/buf" @@ -169,7 +169,7 @@ func (r *StreamReader) Read(p []byte) (int, error) { payloadLen := int(binary.BigEndian.Uint16(decryptedLen)) if payloadLen == 0 { - return 0, nil + return 0, ErrInvalidRequest } chunkEnd := payloadLen + AEADTagSize @@ -213,7 +213,7 @@ func (r *StreamReader) ReadMultiBuffer() (buf.MultiBuffer, error) { payloadLen := int(binary.BigEndian.Uint16(decryptedLen)) if payloadLen == 0 { - return nil, nil + return nil, ErrInvalidRequest } chunkEnd := payloadLen + AEADTagSize @@ -375,7 +375,7 @@ func WriteTCPRequest(w io.Writer, method *CipherMethod, pskList [][]byte, dest n payloadLen := len(payload) var paddingLen int if payloadLen < MaxPaddingLength { - paddingLen = mrand.Intn(MaxPaddingLength-payloadLen) + 1 + paddingLen = mrand.IntN(MaxPaddingLength-payloadLen) + 1 } addrPortLen := AddrPortLength(dest) varHeaderLen := addrPortLen + 2 + paddingLen + payloadLen