Skip to content

Commit f61ef28

Browse files
authored
Fix rendering of wiki page list if wiki repo contains other files (#3454) (#3463)
* Fix rendering of wiki page list if wiki repo contains other files * Improve wiki filename tests
1 parent b27e10d commit f61ef28

File tree

4 files changed

+26
-2
lines changed

4 files changed

+26
-2
lines changed

models/error.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,21 @@ func (err ErrWikiReservedName) Error() string {
216216
return fmt.Sprintf("wiki title is reserved: %s", err.Title)
217217
}
218218

219+
// ErrWikiInvalidFileName represents an invalid wiki file name.
220+
type ErrWikiInvalidFileName struct {
221+
FileName string
222+
}
223+
224+
// IsErrWikiInvalidFileName checks if an error is an ErrWikiInvalidFileName.
225+
func IsErrWikiInvalidFileName(err error) bool {
226+
_, ok := err.(ErrWikiInvalidFileName)
227+
return ok
228+
}
229+
230+
func (err ErrWikiInvalidFileName) Error() string {
231+
return fmt.Sprintf("Invalid wiki filename: %s", err.FileName)
232+
}
233+
219234
// __________ ___. .__ .__ ____ __.
220235
// \______ \__ _\_ |__ | | |__| ____ | |/ _|____ ___.__.
221236
// | ___/ | \ __ \| | | |/ ___\ | <_/ __ < | |

models/wiki.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func WikiNameToFilename(name string) string {
4545
// WikiFilenameToName converts a wiki filename to its corresponding page name.
4646
func WikiFilenameToName(filename string) (string, error) {
4747
if !strings.HasSuffix(filename, ".md") {
48-
return "", fmt.Errorf("Invalid wiki filename: %s", filename)
48+
return "", ErrWikiInvalidFileName{filename}
4949
}
5050
basename := filename[:len(filename)-3]
5151
unescaped, err := url.QueryUnescape(basename)

models/wiki_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,14 @@ func TestWikiFilenameToName(t *testing.T) {
7777
for _, badFilename := range []string{
7878
"nofileextension",
7979
"wrongfileextension.txt",
80-
"badescaping%%.md",
8180
} {
8281
_, err := WikiFilenameToName(badFilename)
8382
assert.Error(t, err)
83+
assert.True(t, IsErrWikiInvalidFileName(err))
8484
}
85+
_, err := WikiFilenameToName("badescaping%%.md")
86+
assert.Error(t, err)
87+
assert.False(t, IsErrWikiInvalidFileName(err))
8588
}
8689

8790
func TestWikiNameToFilenameToName(t *testing.T) {

routers/repo/wiki.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ func renderWikiPage(ctx *context.Context, isViewPage bool) (*git.Repository, *gi
128128
}
129129
wikiName, err := models.WikiFilenameToName(entry.Name())
130130
if err != nil {
131+
if models.IsErrWikiInvalidFileName(err) {
132+
continue
133+
}
131134
ctx.ServerError("WikiFilenameToName", err)
132135
return nil, nil
133136
} else if wikiName == "_Sidebar" || wikiName == "_Footer" {
@@ -262,6 +265,9 @@ func WikiPages(ctx *context.Context) {
262265
}
263266
wikiName, err := models.WikiFilenameToName(entry.Name())
264267
if err != nil {
268+
if models.IsErrWikiInvalidFileName(err) {
269+
continue
270+
}
265271
ctx.ServerError("WikiFilenameToName", err)
266272
return
267273
}

0 commit comments

Comments
 (0)