summaryrefslogtreecommitdiffstats
path: root/routers/web/repo/wiki.go
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-08-30 21:50:35 +0100
committerGitHub <noreply@github.com>2021-08-30 22:50:35 +0200
commit9119d2457365afade30c1f4999e9998c2295665e (patch)
tree348f8ca4d70215f8e54f812ee52f24fbfe86f6aa /routers/web/repo/wiki.go
parent73394f435c4a15b9d2ef5449213254f12fb34e1d (diff)
downloadgitea-9119d2457365afade30c1f4999e9998c2295665e.tar.gz
gitea-9119d2457365afade30c1f4999e9998c2295665e.zip
Ensure wiki repos are all closed (#16886)
There are multiple places where wiki git repositories are not properly closed. This PR ensures they are closed. Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'routers/web/repo/wiki.go')
-rw-r--r--routers/web/repo/wiki.go66
1 files changed, 34 insertions, 32 deletions
diff --git a/routers/web/repo/wiki.go b/routers/web/repo/wiki.go
index 2057229bf9..f0b91aae99 100644
--- a/routers/web/repo/wiki.go
+++ b/routers/web/repo/wiki.go
@@ -135,6 +135,9 @@ func wikiContentsByName(ctx *context.Context, commit *git.Commit, wikiName strin
func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
wikiRepo, commit, err := findWikiRepoCommit(ctx)
if err != nil {
+ if wikiRepo != nil {
+ wikiRepo.Close()
+ }
if !git.IsErrNotExist(err) {
ctx.ServerError("GetBranchCommit", err)
}
@@ -222,6 +225,9 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
var buf strings.Builder
if err := markdown.Render(rctx, bytes.NewReader(data), &buf); err != nil {
+ if wikiRepo != nil {
+ wikiRepo.Close()
+ }
ctx.ServerError("Render", err)
return nil, nil
}
@@ -229,6 +235,9 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
buf.Reset()
if err := markdown.Render(rctx, bytes.NewReader(sidebarContent), &buf); err != nil {
+ if wikiRepo != nil {
+ wikiRepo.Close()
+ }
ctx.ServerError("Render", err)
return nil, nil
}
@@ -237,6 +246,9 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
buf.Reset()
if err := markdown.Render(rctx, bytes.NewReader(footerContent), &buf); err != nil {
+ if wikiRepo != nil {
+ wikiRepo.Close()
+ }
ctx.ServerError("Render", err)
return nil, nil
}
@@ -377,17 +389,14 @@ func Wiki(ctx *context.Context) {
}
wikiRepo, entry := renderViewPage(ctx)
- if ctx.Written() {
- if wikiRepo != nil {
- wikiRepo.Close()
- }
- return
- }
defer func() {
if wikiRepo != nil {
wikiRepo.Close()
}
}()
+ if ctx.Written() {
+ return
+ }
if entry == nil {
ctx.Data["Title"] = ctx.Tr("repo.wiki")
ctx.HTML(http.StatusOK, tplWikiStart)
@@ -422,17 +431,15 @@ func WikiRevision(ctx *context.Context) {
}
wikiRepo, entry := renderRevisionPage(ctx)
- if ctx.Written() {
- if wikiRepo != nil {
- wikiRepo.Close()
- }
- return
- }
defer func() {
if wikiRepo != nil {
wikiRepo.Close()
}
}()
+
+ if ctx.Written() {
+ return
+ }
if entry == nil {
ctx.Data["Title"] = ctx.Tr("repo.wiki")
ctx.HTML(http.StatusOK, tplWikiStart)
@@ -469,13 +476,14 @@ func WikiPages(ctx *context.Context) {
}
return
}
-
- entries, err := commit.ListEntries()
- if err != nil {
+ defer func() {
if wikiRepo != nil {
wikiRepo.Close()
}
+ }()
+ entries, err := commit.ListEntries()
+ if err != nil {
ctx.ServerError("ListEntries", err)
return
}
@@ -486,10 +494,6 @@ func WikiPages(ctx *context.Context) {
}
c, err := wikiRepo.GetCommitByPath(entry.Name())
if err != nil {
- if wikiRepo != nil {
- wikiRepo.Close()
- }
-
ctx.ServerError("GetCommit", err)
return
}
@@ -498,10 +502,6 @@ func WikiPages(ctx *context.Context) {
if models.IsErrWikiInvalidFileName(err) {
continue
}
- if wikiRepo != nil {
- wikiRepo.Close()
- }
-
ctx.ServerError("WikiFilenameToName", err)
return
}
@@ -513,21 +513,25 @@ func WikiPages(ctx *context.Context) {
}
ctx.Data["Pages"] = pages
- defer func() {
- if wikiRepo != nil {
- wikiRepo.Close()
- }
- }()
ctx.HTML(http.StatusOK, tplWikiPages)
}
// WikiRaw outputs raw blob requested by user (image for example)
func WikiRaw(ctx *context.Context) {
wikiRepo, commit, err := findWikiRepoCommit(ctx)
- if err != nil {
+ defer func() {
if wikiRepo != nil {
+ wikiRepo.Close()
+ }
+ }()
+
+ if err != nil {
+ if git.IsErrNotExist(err) {
+ ctx.NotFound("findEntryForFile", nil)
return
}
+ ctx.ServerError("findEntryForfile", err)
+ return
}
providedPath := ctx.Params("*")
@@ -543,9 +547,7 @@ func WikiRaw(ctx *context.Context) {
if entry == nil {
// Try to find a wiki page with that name
- if strings.HasSuffix(providedPath, ".md") {
- providedPath = providedPath[:len(providedPath)-3]
- }
+ providedPath = strings.TrimSuffix(providedPath, ".md")
wikiPath := wiki_service.NameToFilename(providedPath)
entry, err = findEntryForFile(commit, wikiPath)