mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-24 20:32:42 +01:00
Check for either escaped or unescaped wiki filenames (#8408)
* Check for either escaped or unescaped wiki filenames + Gitea currently saves wiki pages with escaped filenames. + Wikis mirrored from other places like Github use unescaped filenames. + We need to be checking for filenames in either format to increase compatibility. * Better logic for escaped and unescaped wiki filenames Co-Authored-By: null <guillep2k@users.noreply.github.com>
This commit is contained in:
parent
7ad46cc116
commit
b6616591d1
1 changed files with 12 additions and 0 deletions
|
@ -8,6 +8,7 @@ package repo
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"net/url"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -68,11 +69,22 @@ func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
// The longest name should be checked first
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
if entry.IsRegular() && entry.Name() == target {
|
if entry.IsRegular() && entry.Name() == target {
|
||||||
return entry, nil
|
return entry, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Then the unescaped, shortest alternative
|
||||||
|
var unescapedTarget string
|
||||||
|
if unescapedTarget, err = url.QueryUnescape(target); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, entry := range entries {
|
||||||
|
if entry.IsRegular() && entry.Name() == unescapedTarget {
|
||||||
|
return entry, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue