diff options
| author | Zhenyu Qi <qzydustin@hotmail.com> | 2026-01-02 18:12:13 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-02 18:12:13 +0300 |
| commit | c881d1015a72fed333bea04fb28b74d1f2517074 (patch) | |
| tree | 0ef895ef21290d68100329c4298e3f1afd7732b8 | |
| parent | c061337ce76f4b2dffc8a86340b0133538528576 (diff) | |
fix: handle GitHub API error responses in GetXrayVersions (#3609)
GitHub API returns JSON object instead of array when encountering errors
(e.g., rate limit exceeded). This causes JSON unmarshal error:
'cannot unmarshal object into Go value of type []service.Release'
Add HTTP status code check to handle error responses gracefully and
return user-friendly error messages instead of JSON parsing errors.
Fixes issue where getXrayVersion fails with unmarshal error when
GitHub API rate limit is exceeded.
| -rw-r--r-- | web/service/server.go | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/web/service/server.go b/web/service/server.go index d48a96c3..970c5c0f 100644 --- a/web/service/server.go +++ b/web/service/server.go @@ -529,6 +529,18 @@ func (s *ServerService) GetXrayVersions() ([]string, error) { } defer resp.Body.Close() + // Check HTTP status code - GitHub API returns object instead of array on error + if resp.StatusCode != http.StatusOK { + bodyBytes, _ := io.ReadAll(resp.Body) + var errorResponse struct { + Message string `json:"message"` + } + if json.Unmarshal(bodyBytes, &errorResponse) == nil && errorResponse.Message != "" { + return nil, fmt.Errorf("GitHub API error: %s", errorResponse.Message) + } + return nil, fmt.Errorf("GitHub API returned status %d: %s", resp.StatusCode, resp.Status) + } + buffer := bytes.NewBuffer(make([]byte, bufferSize)) buffer.Reset() if _, err := buffer.ReadFrom(resp.Body); err != nil { |
