From b112f4fc984a093bad8da900fc5a6f147eb45228 Mon Sep 17 00:00:00 2001 From: Nikita Nemirovsky Date: Thu, 2 Apr 2026 09:54:55 +0800 Subject: [PATCH] fix(sub): use safe type assertion for xhttp mode field 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 --- sub/subService.go | 8 ++++---- 1 file 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)