From 95d27440200033346a70c2a400d6c189bd3933c2 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 30 Aug 2021 23:22:36 +0200 Subject: [PATCH] Ensure wiki repos are all closed (#16886) (#16889) There are multiple places where wiki git repositories are not properly closed. This PR ensures they are closed. Signed-off-by: Andrew Thornton Co-authored-by: Andrew Thornton --- routers/repo/wiki.go | 57 +++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/routers/repo/wiki.go b/routers/repo/wiki.go index c4521a3071..d2345a7f0b 100644 --- a/routers/repo/wiki.go +++ b/routers/repo/wiki.go @@ -131,6 +131,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) } @@ -354,17 +357,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(200, tplWikiStart) @@ -399,17 +399,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(200, tplWikiStart) @@ -446,13 +444,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 } @@ -463,10 +462,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 } @@ -475,10 +470,6 @@ func WikiPages(ctx *context.Context) { if models.IsErrWikiInvalidFileName(err) { continue } - if wikiRepo != nil { - wikiRepo.Close() - } - ctx.ServerError("WikiFilenameToName", err) return } @@ -490,21 +481,25 @@ func WikiPages(ctx *context.Context) { } ctx.Data["Pages"] = pages - defer func() { - if wikiRepo != nil { - wikiRepo.Close() - } - }() ctx.HTML(200, 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("*") @@ -520,9 +515,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)