fix #866: SOCKS5 nil ptr TLSConfig in selector

Move SetDefaultTLSConfig before register(cfg) in loader.go so
ParseService can access it when building handlers. Also add a
defensive nil check in socks5 serverSelector.Select() for
MethodTLS to prevent future ordering regressions.

Root cause: in selector.go, Select() tried to read ClientHello
via TLSConfig.GetConfigForClient but s.TLSConfig was nil because
register(cfg) -> ParseService -> handler Init ran before
SetDefaultTLSConfig was called from loader.go.
This commit is contained in:
ginuerzh
2026-06-03 20:17:20 +08:00
parent 81db46b725
commit 91920aa805
2 changed files with 3 additions and 3 deletions
+2 -2
View File
@@ -78,12 +78,12 @@ func (l *loader) Load(cfg *config.Config) error {
}
logger.SetDefault(logger_parser.ParseLogger(&config.LoggerConfig{Log: logCfg}))
parsing.SetDefaultTLSConfig(tlsCfg)
if err := register(cfg); err != nil {
return err
}
parsing.SetDefaultTLSConfig(tlsCfg)
return nil
}
+1 -1
View File
@@ -29,7 +29,7 @@ func (s *serverSelector) Select(methods ...uint8) (method uint8) {
s.logger.Debugf("%d %d %v", gosocks5.Ver5, len(methods), methods)
method = gosocks5.MethodNoAuth
for _, m := range methods {
if m == socks.MethodTLS && !s.noTLS {
if m == socks.MethodTLS && !s.noTLS && s.TLSConfig != nil {
method = m
break
}