]> source.dussan.org Git - gitea.git/commitdiff
Avoid 500 panic error when uploading invalid maven package file (#31014) (#31027)
authorGiteabot <teabot@gitea.io>
Mon, 20 May 2024 07:10:27 +0000 (15:10 +0800)
committerGitHub <noreply@github.com>
Mon, 20 May 2024 07:10:27 +0000 (07:10 +0000)
Backport #31014 by wxiaoguang

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
options/locale/locale_en-US.ini
templates/package/content/maven.tmpl
templates/package/metadata/maven.tmpl
tests/integration/api_packages_maven_test.go

index caeb48a44b2eeb2d3444beb13b01c287e3375e81..da45eee92abc2ab5bddc1f900055bc69bfb4d3b4 100644 (file)
@@ -3415,6 +3415,7 @@ error.unit_not_allowed = You are not allowed to access this repository section.
 title = Packages
 desc = Manage repository packages.
 empty = There are no packages yet.
+no_metadata = No metadata.
 empty.documentation = For more information on the package registry, see <a target="_blank" rel="noopener noreferrer" href="%s">the documentation</a>.
 empty.repo = Did you upload a package, but it's not shown here? Go to <a href="%[1]s">package settings</a> and link it to this repo.
 registry.documentation = For more information on the %s registry, see <a target="_blank" rel="noopener noreferrer" href="%s">the documentation</a>.
index 3a7de335de88fb0b410865fbd96340147a95eb46..f56595a8308ec5c56dd088476d75aec269148098 100644 (file)
@@ -1,4 +1,8 @@
-{{if eq .PackageDescriptor.Package.Type "maven"}}
+{{if and (eq .PackageDescriptor.Package.Type "maven") (not .PackageDescriptor.Metadata)}}
+       <h4 class="ui top attached header">{{ctx.Locale.Tr "packages.installation"}}</h4>
+       <div class="ui attached segment">{{ctx.Locale.Tr "packages.no_metadata"}}</div>
+{{end}}
+{{if and (eq .PackageDescriptor.Package.Type "maven") .PackageDescriptor.Metadata}}
        <h4 class="ui top attached header">{{ctx.Locale.Tr "packages.installation"}}</h4>
        <div class="ui attached segment">
                <div class="ui form">
index 548be61790fff68cf2cb7ca7151b5383084c82ba..36412723d24f875a01e5ad62c84204ea278caf8f 100644 (file)
@@ -1,4 +1,7 @@
-{{if eq .PackageDescriptor.Package.Type "maven"}}
+{{if and (eq .PackageDescriptor.Package.Type "maven") (not .PackageDescriptor.Metadata)}}
+       <div class="item">{{svg "octicon-note" 16 "tw-mr-2"}} {{ctx.Locale.Tr "packages.no_metadata"}}</div>
+{{end}}
+{{if and (eq .PackageDescriptor.Package.Type "maven") .PackageDescriptor.Metadata}}
        {{if .PackageDescriptor.Metadata.Name}}<div class="item">{{svg "octicon-note" 16 "tw-mr-2"}} {{.PackageDescriptor.Metadata.Name}}</div>{{end}}
        {{if .PackageDescriptor.Metadata.ProjectURL}}<div class="item">{{svg "octicon-link-external" 16 "tw-mr-2"}} <a href="{{.PackageDescriptor.Metadata.ProjectURL}}" target="_blank" rel="noopener noreferrer me">{{ctx.Locale.Tr "packages.details.project_site"}}</a></div>{{end}}
        {{range .PackageDescriptor.Metadata.Licenses}}<div class="item" title="{{ctx.Locale.Tr "packages.details.license"}}">{{svg "octicon-law" 16 "tw-mr-2"}} {{.}}</div>{{end}}
index c7ed554a9d7f78842bf7b9b2afef92557554f65f..0466a727b25f0d8112e11f0a93ff3616ba8dd421 100644 (file)
@@ -15,6 +15,7 @@ import (
        "code.gitea.io/gitea/models/unittest"
        user_model "code.gitea.io/gitea/models/user"
        "code.gitea.io/gitea/modules/packages/maven"
+       "code.gitea.io/gitea/modules/test"
        "code.gitea.io/gitea/tests"
 
        "github.com/stretchr/testify/assert"
@@ -241,4 +242,13 @@ func TestPackageMaven(t *testing.T) {
                putFile(t, fmt.Sprintf("/%s/maven-metadata.xml", snapshotVersion), "test", http.StatusCreated)
                putFile(t, fmt.Sprintf("/%s/maven-metadata.xml", snapshotVersion), "test-overwrite", http.StatusCreated)
        })
+
+       t.Run("InvalidFile", func(t *testing.T) {
+               ver := packageVersion + "-invalid"
+               putFile(t, fmt.Sprintf("/%s/%s", ver, filename), "any invalid content", http.StatusCreated)
+               req := NewRequestf(t, "GET", "/%s/-/packages/maven/%s-%s/%s", user.Name, groupID, artifactID, ver)
+               resp := MakeRequest(t, req, http.StatusOK)
+               assert.Contains(t, resp.Body.String(), "No metadata.")
+               assert.True(t, test.IsNormalPageCompleted(resp.Body.String()))
+       })
 }