From 832268cae7eff9ebf579daee722436075e4cd4cd Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Tue, 30 Sep 2025 11:23:39 +0800 Subject: [PATCH] refactor(proxy): improve SOCKS5 proxy authentication handling - Added nil check for proxy user credentials to prevent potential nil pointer dereference. - Enhanced authentication logic for SOCKS5 proxies in `proxy_helpers.go` and `proxy.go`. --- internal/runtime/executor/proxy_helpers.go | 9 ++++++--- internal/util/proxy.go | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/internal/runtime/executor/proxy_helpers.go b/internal/runtime/executor/proxy_helpers.go index 4979e9f5..ab0f626a 100644 --- a/internal/runtime/executor/proxy_helpers.go +++ b/internal/runtime/executor/proxy_helpers.go @@ -87,9 +87,12 @@ func buildProxyTransport(proxyURL string) *http.Transport { // Handle different proxy schemes if parsedURL.Scheme == "socks5" { // Configure SOCKS5 proxy with optional authentication - username := parsedURL.User.Username() - password, _ := parsedURL.User.Password() - proxyAuth := &proxy.Auth{User: username, Password: password} + var proxyAuth *proxy.Auth + if parsedURL.User != nil { + username := parsedURL.User.Username() + password, _ := parsedURL.User.Password() + proxyAuth = &proxy.Auth{User: username, Password: password} + } dialer, errSOCKS5 := proxy.SOCKS5("tcp", parsedURL.Host, proxyAuth, proxy.Direct) if errSOCKS5 != nil { log.Errorf("create SOCKS5 dialer failed: %v", errSOCKS5) diff --git a/internal/util/proxy.go b/internal/util/proxy.go index fa51dd43..aea52ba8 100644 --- a/internal/util/proxy.go +++ b/internal/util/proxy.go @@ -25,9 +25,12 @@ func SetProxy(cfg *config.SDKConfig, httpClient *http.Client) *http.Client { // Handle different proxy schemes. if proxyURL.Scheme == "socks5" { // Configure SOCKS5 proxy with optional authentication. - username := proxyURL.User.Username() - password, _ := proxyURL.User.Password() - proxyAuth := &proxy.Auth{User: username, Password: password} + var proxyAuth *proxy.Auth + if proxyURL.User != nil { + username := proxyURL.User.Username() + password, _ := proxyURL.User.Password() + proxyAuth = &proxy.Auth{User: username, Password: password} + } dialer, errSOCKS5 := proxy.SOCKS5("tcp", proxyURL.Host, proxyAuth, proxy.Direct) if errSOCKS5 != nil { log.Errorf("create SOCKS5 dialer failed: %v", errSOCKS5)