From 67aa99cbdfcb0d0209860aa2dc65295fa450127e Mon Sep 17 00:00:00 2001 From: Nick Guenther Date: Mon, 13 Feb 2023 20:50:02 -0500 Subject: [PATCH] Avoid recursing into sub-sub-sub-docs folders when looking for READMEs. Fixes a bug introduced in https://github.com/go-gitea/gitea/pull/22177 which allows finding READMEs like docs/docs/docs/.gitea/.github/docs/README.md --- routers/web/repo/view.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index 46f25ed22dad..6ef1bd2d61ae 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -58,7 +58,7 @@ const ( // entries == ctx.Repo.Commit.SubTree(ctx.Repo.TreePath).ListEntries() // // FIXME: There has to be a more efficient way of doing this -func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (string, *git.TreeEntry, error) { +func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry, recurse bool) (string, *git.TreeEntry, error) { // Create a list of extensions in priority order // 1. Markdown files - with and without localisation - e.g. README.en-us.md or README.md // 2. Txt files - e.g. README.txt @@ -115,7 +115,7 @@ func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (st } } - if ctx.Repo.TreePath == "" && readmeFile == nil { + if ctx.Repo.TreePath == "" && recurse && readmeFile == nil { for _, subTreeEntry := range docsEntries { if subTreeEntry == nil { continue @@ -131,7 +131,7 @@ func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (st return "", nil, err } - subfolder, readmeFile, err := findReadmeFileInEntries(ctx, childEntries) + subfolder, readmeFile, err := findReadmeFileInEntries(ctx, childEntries, false) if err != nil && !git.IsErrNotExist(err) { return "", nil, err } @@ -165,7 +165,7 @@ func renderDirectory(ctx *context.Context, treeLink string) { return } - subfolder, readmeFile, err := findReadmeFileInEntries(ctx, entries) + subfolder, readmeFile, err := findReadmeFileInEntries(ctx, entries, true) if err != nil { ctx.ServerError("findReadmeFileInEntries", err) return