Просмотр исходного кода

sub: dont panic on bad externalProxy entry in genHysteriaLink

The externalProxy fanout from #4073 did `int(ep["port"].(float64))`
with no ok-check. If any entry is missing port or has the wrong
type it panics, and since this runs in the /sub/<id> handler the
whole subscription returns 500. Skip malformed entries instead.
pwnnex 2 дней назад
Родитель
Сommit
17f67ef3a5
1 измененных файлов с 9 добавлено и 3 удалено
  1. 9 3
      sub/subService.go

+ 9 - 3
sub/subService.go

@@ -987,12 +987,18 @@ func (s *SubService) genHysteriaLink(inbound *model.Inbound, email string) strin
 	if len(externalProxies) > 0 {
 		links := make([]string, 0, len(externalProxies))
 		for _, externalProxy := range externalProxies {
-			ep, _ := externalProxy.(map[string]interface{})
+			ep, ok := externalProxy.(map[string]interface{})
+			if !ok {
+				continue
+			}
 			dest, _ := ep["dest"].(string)
-			epPort := int(ep["port"].(float64))
+			portF, okPort := ep["port"].(float64)
+			if dest == "" || !okPort {
+				continue
+			}
 			epRemark, _ := ep["remark"].(string)
 
-			link := fmt.Sprintf("%s://%s@%s:%d", protocol, auth, dest, epPort)
+			link := fmt.Sprintf("%s://%s@%s:%d", protocol, auth, dest, int(portF))
 			u, _ := url.Parse(link)
 			q := u.Query()
 			for k, v := range params {