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:
@@ -78,12 +78,12 @@ func (l *loader) Load(cfg *config.Config) error {
|
|||||||
}
|
}
|
||||||
logger.SetDefault(logger_parser.ParseLogger(&config.LoggerConfig{Log: logCfg}))
|
logger.SetDefault(logger_parser.ParseLogger(&config.LoggerConfig{Log: logCfg}))
|
||||||
|
|
||||||
|
parsing.SetDefaultTLSConfig(tlsCfg)
|
||||||
|
|
||||||
if err := register(cfg); err != nil {
|
if err := register(cfg); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
parsing.SetDefaultTLSConfig(tlsCfg)
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ func (s *serverSelector) Select(methods ...uint8) (method uint8) {
|
|||||||
s.logger.Debugf("%d %d %v", gosocks5.Ver5, len(methods), methods)
|
s.logger.Debugf("%d %d %v", gosocks5.Ver5, len(methods), methods)
|
||||||
method = gosocks5.MethodNoAuth
|
method = gosocks5.MethodNoAuth
|
||||||
for _, m := range methods {
|
for _, m := range methods {
|
||||||
if m == socks.MethodTLS && !s.noTLS {
|
if m == socks.MethodTLS && !s.noTLS && s.TLSConfig != nil {
|
||||||
method = m
|
method = m
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user