From ef7fd781f5f5f5812a8a947845afac7a1dba4886 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 10 Apr 2023 23:00:19 -0400 Subject: [PATCH] Avoid recursing into sub-sub-sub-docs folders when looking for READMEs. (#23695) 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 Fixes https://github.com/go-gitea/gitea/issues/23694 --- routers/web/repo/view.go | 8 ++++---- tests/integration/repo_test.go | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index 5bf961f412..9cd5fc9e40 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, tryWellKnownDirs 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 @@ -69,7 +69,7 @@ func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (st docsEntries := make([]*git.TreeEntry, 3) // (one of docs/, .gitea/ or .github/) for _, entry := range entries { - if entry.IsDir() { + if tryWellKnownDirs && entry.IsDir() { // as a special case for the top-level repo introduction README, // fall back to subfolders, looking for e.g. docs/README.md, .gitea/README.zh-CN.txt, .github/README.txt, ... // (note that docsEntries is ignored unless we are at the root) @@ -130,7 +130,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 } @@ -164,7 +164,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 diff --git a/tests/integration/repo_test.go b/tests/integration/repo_test.go index 5ddedfcf36..f03a3b37fd 100644 --- a/tests/integration/repo_test.go +++ b/tests/integration/repo_test.go @@ -361,7 +361,7 @@ func TestViewRepoDirectoryReadme(t *testing.T) { } missing("sp-ace", "/user2/readme-test/src/branch/sp-ace/") missing("nested-special", "/user2/readme-test/src/branch/special-subdir-nested/subproject") // the special subdirs should only trigger on the repo root - // missing("special-subdir-nested", "/user2/readme-test/src/branch/special-subdir-nested/") // This is currently FAILING, due to a bug introduced in https://github.com/go-gitea/gitea/pull/22177 + missing("special-subdir-nested", "/user2/readme-test/src/branch/special-subdir-nested/") missing("symlink-loop", "/user2/readme-test/src/branch/symlink-loop/") }