{"record":{"id":"2ad6106645b0c682","repo":"fish2018/pansou","slug":"jwt","errorCode":null,"errorMessage":"无效的JWT格式","messagePattern":"无效的JWT格式","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugin/susu/susu.go","lineNumber":517,"sourceCode":"\n\treturn link, nil\n}\n\n// decodeJWTURL 解析JWT token获取真实链接\nfunc (p *SusuAsyncPlugin) decodeJWTURL(jwtToken string) (string, error) {\n\tif strings.HasPrefix(jwtToken, \"http://\") || strings.HasPrefix(jwtToken, \"https://\") {\n\t\treturn jwtToken, nil\n\t}\n\n\t// 检查缓存\n\tif cachedURL, ok := jwtDecodeCache.Load(jwtToken); ok {\n\t\treturn cachedURL.(string), nil\n\t}\n\n\t// 分割JWT\n\tparts := strings.Split(jwtToken, \".\")\n\tif len(parts) != 3 {\n\t\treturn \"\", fmt.Errorf(\"无效的JWT格式\")\n\t}\n\n\t// 解码Payload\n\tpayload, err := base64.RawURLEncoding.DecodeString(parts[1])\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"解码Payload失败: %w\", err)\n\t}\n\n\t// 解析JSON\n\tvar payloadData struct {\n\t\tData struct {\n\t\t\tURL string `json:\"url\"`\n\t\t} `json:\"data\"`\n\t}\n\tif err := json.Unmarshal(payload, &payloadData); err != nil {\n\t\treturn \"\", fmt.Errorf(\"解析Payload JSON失败: %w\", err)\n\t}\n\tif strings.TrimSpace(payloadData.Data.URL) == \"\" {","sourceCodeStart":499,"sourceCodeEnd":535,"githubUrl":"https://github.com/fish2018/pansou/blob/beaa56133755a548ebc51b090b3816e2ae044aa6/plugin/susu/susu.go#L499-L535","documentation":"Format guard in decodeJWTURL: the token does not start with http(s) and does not split on '.' into exactly 3 segments (header.payload.signature). Input at fault is the Button.URL value from susu — it is not a JWT at all.","triggerScenarios":"Thrown at plugin/susu/susu.go:517 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check what susu actually returned in Button.URL","Handle 2-segment or otherwise-shaped tokens if the site changed format","Fail per-link, not per-search"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"beaa56133755a548ebc51b090b3816e2ae044aa6","analyzedAt":"2026-09-07T00:31:18.025Z","contentChangedAt":"2026-09-07T00:31:18.025Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}