调用 inboundManager.Create(...) 时把第二个参数 router 传成了 nil。但 protocol/shadowsocks/inbound_multi.go 初始化时会无条件把这个 router 包进 uot.NewRouter(router, logger),所以 client 每次重连都会稳定触发一次空指针。

This commit is contained in:
CN-JS-HuiBai
2026-04-15 11:33:58 +08:00
parent 0afdc9cc89
commit c3a2e85266
2 changed files with 18 additions and 1 deletions

View File

@@ -72,6 +72,7 @@ type Service struct {
reportTicker *time.Ticker
aliveTicker *time.Ticker
access sync.Mutex
router adapter.Router
inboundManager adapter.InboundManager
ssCipher string // stored for user key derivation in syncUsers
ssServerKey string // stored for SS2022 per-user key extraction
@@ -258,6 +259,7 @@ func NewService(ctx context.Context, logger log.ContextLogger, tag string, optio
syncTicker: time.NewTicker(time.Duration(options.SyncInterval)),
reportTicker: time.NewTicker(time.Duration(options.ReportInterval)),
aliveTicker: time.NewTicker(1 * time.Minute),
router: service.FromContext[adapter.Router](ctx),
inboundManager: service.FromContext[adapter.InboundManager](ctx),
}
@@ -759,7 +761,7 @@ func (s *Service) setupNode() error {
s.inboundManager.Remove(inboundTag)
// Create new inbound
err = s.inboundManager.Create(s.ctx, nil, s.logger, inboundTag, protocol, inboundOptions)
err = s.inboundManager.Create(s.ctx, s.router, s.logger, inboundTag, protocol, inboundOptions)
if err != nil {
return err
}

View File

@@ -51,3 +51,18 @@ func TestResolveUserKeyForNonSS2022UsesResolvedKey(t *testing.T) {
t.Fatalf("resolveUserKey() = %q, want %q", got, "passwd-value")
}
}
func TestXUserIdentifierFallsBackToEmailThenID(t *testing.T) {
userWithEmail := XUser{
ID: 8,
Email: "user@example.com",
}
if got := userWithEmail.Identifier(); got != "user@example.com" {
t.Fatalf("Identifier() = %q, want %q", got, "user@example.com")
}
userWithID := XUser{ID: 9}
if got := userWithID.Identifier(); got != "9" {
t.Fatalf("Identifier() = %q, want %q", got, "9")
}
}