mirror of
1
Fork 0

fix(repo): return code 400 instead of 500 for invalid archive type (#7029)

The error handled might be non-nil only when format is bad, which is 400 (Bad Request)

Fixes #7026

Signed-off-by: Dmitrii Sharshakov <d3dx12.xx@gmail.com>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7029
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Co-authored-by: Dmitrii Sharshakov <d3dx12.xx@gmail.com>
Co-committed-by: Dmitrii Sharshakov <d3dx12.xx@gmail.com>
This commit is contained in:
Dmitrii Sharshakov 2025-02-25 18:44:41 +00:00 committed by 0ko
parent 17db5f3793
commit 6fb069cc50
2 changed files with 6 additions and 2 deletions

View File

@ -474,7 +474,7 @@ func Download(ctx *context.Context) {
uri := ctx.Params("*") uri := ctx.Params("*")
ext, tp, err := archiver_service.ParseFileName(uri) ext, tp, err := archiver_service.ParseFileName(uri)
if err != nil { if err != nil {
ctx.ServerError("ParseFileName", err) ctx.NotFound("ParseFileName", err)
return return
} }
aReq, err := archiver_service.NewRequest(ctx, ctx.Repo.Repository.ID, ctx.Repo.GitRepo, strings.TrimSuffix(uri, ext), tp) aReq, err := archiver_service.NewRequest(ctx, ctx.Repo.Repository.ID, ctx.Repo.GitRepo, strings.TrimSuffix(uri, ext), tp)
@ -554,7 +554,7 @@ func InitiateDownload(ctx *context.Context) {
uri := ctx.Params("*") uri := ctx.Params("*")
ext, tp, err := archiver_service.ParseFileName(uri) ext, tp, err := archiver_service.ParseFileName(uri)
if err != nil { if err != nil {
ctx.ServerError("ParseFileName", err) ctx.NotFound("ParseFileName", err)
return return
} }
aReq, err := archiver_service.NewRequest(ctx, ctx.Repo.Repository.ID, ctx.Repo.GitRepo, strings.TrimSuffix(uri, ext), tp) aReq, err := archiver_service.NewRequest(ctx, ctx.Repo.Repository.ID, ctx.Repo.GitRepo, strings.TrimSuffix(uri, ext), tp)

View File

@ -39,6 +39,10 @@ func TestRepoDownloadArchive(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
assert.Empty(t, resp.Header().Get("Content-Encoding")) assert.Empty(t, resp.Header().Get("Content-Encoding"))
assert.Len(t, bs, 320) assert.Len(t, bs, 320)
// Verify that unrecognized archive type returns 404
req = NewRequest(t, "GET", "/user2/repo1/archive/master.invalid")
MakeRequest(t, req, http.StatusNotFound)
} }
func TestRepoDownloadArchiveSubdir(t *testing.T) { func TestRepoDownloadArchiveSubdir(t *testing.T) {