Error when searching for a bogus range
Peter Wu
peter at lekensteyn.nl
Tue Jun 10 23:07:20 CEST 2014
On Tuesday 10 June 2014 21:59:39 John Keeping wrote:
> On Tue, Jun 10, 2014 at 02:05:14PM -0400, Konstantin Ryabitsev wrote:
> > cgit-0.10.1-1.el6 (EPEL version)
> >
> > If you search for a bogus range string here:
> >
> > http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/log/
> >
> > Using something like "range" and "qwerty123456", it returns an "Internal
> > Server Error" and the following in the logs:
> >
> > > [Tue Jun 10 17:45:32 2014] [error] [client 172.21.1.6] fatal: ambiguous argument 'qwerty123456': unknown revision or path not in the working tree., referer: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
> > > [Tue Jun 10 17:45:32 2014] [error] [client 172.21.1.6] Use '--' to separate paths from revisions, like this:, referer: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
> > > [Tue Jun 10 17:45:32 2014] [error] [client 172.21.1.6] 'git <command> [<revision>...] -- [<file>...]', referer: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
> > > [Tue Jun 10 17:45:32 2014] [error] [client 172.21.1.6] Premature end of script headers: cgit, referer: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
>
> This is because we just pass the arguments straight to Git's revision
> parsing machinery which die()s if it cannot parse an argument, printing
> the above to stderr and exiting.
>
> The patch below makes it a bit friendlier by just ignoring unhandled
> arguments, but I can't see an easy way to report errors when we can't
> parse revision arguments without losing the flexibility of supporting
> all of the revision specifiers supported by Git.
The patch looks good to me, it reduces the error to just the "fatal: ..."
message. The error can be reproduced with:
echo scan-path=. > cgitrc
CGIT_CONFIG=cgitrc PATH_INFO=/.git/log/ QUERY_STRING=qt=range\&q=foo ./cgit
(assuming .git/ in $PWD)
The accepted argument is the same as the one passed to `git rev-list`.
Unless you manually check for the possible formats (v3.15~10..v3.15,
v3.13.., ..next, foo...bar, you won't be able to catch the error (as
John noted).
Regards,
Peter
> -- >8 --
> diff --git a/ui-log.c b/ui-log.c
> index 499534c..4cb26bc 100644
> --- a/ui-log.c
> +++ b/ui-log.c
> @@ -337,16 +337,16 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
> else if (commit_sort == 2)
> argv_array_push(&rev_argv, "--topo-order");
>
> - if (path) {
> - argv_array_push(&rev_argv, "--");
> + argv_array_push(&rev_argv, "--");
> + if (path)
> argv_array_push(&rev_argv, path);
> - }
>
> init_revisions(&rev, NULL);
> rev.abbrev = DEFAULT_ABBREV;
> rev.commit_format = CMIT_FMT_DEFAULT;
> rev.verbose_header = 1;
> rev.show_root_diff = 0;
> + rev.ignore_missing = 1;
> setup_revisions(rev_argv.argc, rev_argv.argv, &rev, NULL);
> load_ref_decorations(DECORATE_FULL_REFS);
> rev.show_decorations = 1;
More information about the CGit
mailing list