diff options
| author | Bryce Kwon <bryce@brycekwon.com> | |
|---|---|---|
| committer | Bryce Kwon <bryce@brycekwon.com> | |
| commit | ||
| parent | ||
| tree | ||
| download | ||
Refuse pathspec magic in the feed as in the log
A feed path starting with a colon reached git as pathspec magic, so an
unknown magic word ended the request in a 500 and a known one changed
what the path matched, while the log answers both with a 400.
| -rw-r--r-- | source/ui-atom.c | 8 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| -rwxr-xr-x | tests/t0111-atom.sh | 9 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 files changed, 17 insertions, 0 deletions
diff --git a/source/ui-atom.c b/source/ui-atom.c index 39cadb8..0f82c0d 100644 --- a/source/ui-atom.c +++ b/source/ui-atom.c @@ -164,6 +164,14 @@ void cgit_print_atom(char *tip, const char *path, int max_count) int argc = 2; bool need_updated = true; + // A leading colon makes git read the path as a pathspec with magic, + // which can end the request inside git, so the feed refuses it as the + // log does. + if (path && path[0] == ':') { + cgit_print_error_page(400, "Bad Request", "Invalid path"); + return; + } + if (ctx.qry.show_all) argv[1] = "--all"; else if (!tip) diff --git a/tests/t0111-atom.sh b/tests/t0111-atom.sh index 6ffb5b0..48448ef 100755 --- a/tests/t0111-atom.sh +++ b/tests/t0111-atom.sh @@ -59,4 +59,13 @@ test_expect_success XMLLINT 'the feed is well-formed xml' ' xmllint --noout feed ' +# A path starting with a colon would reach git as pathspec magic, which the +# log refuses as well. +test_expect_success 'a path with pathspec magic is refused' ' + cgit_url "foo/atom/%3A%28icase%29FILE-1" >tmp && + grep "^Status: 400" tmp && + cgit_url "foo/atom/file-1" >tmp && + grep "^Status: 200" tmp +' + test_done |
