diff options
| author | Nikita Nemirovsky <68753404+nnemirovsky@users.noreply.github.com> | 2026-04-19 22:12:11 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-19 22:12:11 +0300 |
| commit | 96b568b8389fd5a3ce228d5fb82ec9742d145b15 (patch) | |
| tree | 8f27d269e3eadba18efd189fff8579e6a6c906ee /sub/subService.go | |
| parent | fec714a2431c482024a0952982fa36f38935e7ed (diff) | |
fix(sub): use safe type assertion for xhttp mode field (#3990)
Unsafe type assertion `xhttp["mode"].(string)` panics when mode is
nil (e.g., when xhttpSettings only contains path without mode). The
panic is caught by Gin's recovery middleware and returned as HTTP 500.
Use comma-ok pattern matching the fix already applied to gRPC's
authority field in 21d98813.
Fixes #3987
Diffstat (limited to 'sub/subService.go')
| -rw-r--r-- | sub/subService.go | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sub/subService.go b/sub/subService.go index 818f193b..a0508ddc 100644 --- a/sub/subService.go +++ b/sub/subService.go @@ -247,7 +247,7 @@ func (s *SubService) genVmessLink(inbound *model.Inbound, email string) string { headers, _ := xhttp["headers"].(map[string]any) obj["host"] = searchHost(headers) } - obj["mode"] = xhttp["mode"].(string) + obj["mode"], _ = xhttp["mode"].(string) } security, _ := stream["security"].(string) obj["tls"] = security @@ -405,7 +405,7 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string { headers, _ := xhttp["headers"].(map[string]any) params["host"] = searchHost(headers) } - params["mode"] = xhttp["mode"].(string) + params["mode"], _ = xhttp["mode"].(string) } security, _ := stream["security"].(string) if security == "tls" { @@ -601,7 +601,7 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string headers, _ := xhttp["headers"].(map[string]any) params["host"] = searchHost(headers) } - params["mode"] = xhttp["mode"].(string) + params["mode"], _ = xhttp["mode"].(string) } security, _ := stream["security"].(string) if security == "tls" { @@ -800,7 +800,7 @@ func (s *SubService) genShadowsocksLink(inbound *model.Inbound, email string) st headers, _ := xhttp["headers"].(map[string]any) params["host"] = searchHost(headers) } - params["mode"] = xhttp["mode"].(string) + params["mode"], _ = xhttp["mode"].(string) } security, _ := stream["security"].(string) |
