| Age | Commit message (Collapse) | Author | Lines |
|
|
|
|
|
Only a scanned repository fell back to its description file, so one
listed in cgitrc without repo.desc showed "[no description]" however
its file read. repo.desc may follow repo.path, so the file is read
where a page shows the description, which also spares every other
request the reads.
|
|
|
|
|
|
|
|
QSORT skips a list of fewer than two entries, so an empty list's null
base never reaches qsort, which is what cgit_qsort was written for.
|
|
|
|
Every list sorted here is null until its first entry, and C leaves a
null base undefined even with nothing to sort. glibc declares it
nonnull, and a UBSan build aborted the stats page of a repository with
no commits in the window.
|
|
The index stats the default branch below the repository to date it,
and a scanned repository sets its own defbranch, which was not held to
what a ref may hold, so one spelled as a path reached a file outside.
|
|
The index built its paths from a NULL repo.path, which the C library
prints as "(null)", so it looked for refs under that name in the working
directory.
|
|
The idle column falls back on the mtime of the branch's loose ref or of
packed-refs, and a reftable repository has neither, so its cell stayed
empty. Git rewrites reftable/tables.list on every ref update.
|
|
With nothing below the about page, a readme's relative links have to be
written against the tree, and only cgit knows how this site spells the
url of a tree page and which ref the readme was read from. Both reach
the filter already escaped for a url, built by the same writer as
cgit's own links.
|
|
|
|
Git's DEVELOPER=1 build turns on -Wwrite-strings as an error, and the
literals stored through plain char pointers failed cgit's own objects
there. The exec filter's argv takes the cast execvp needs once, the
way git's run-command does.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AUTHORS now records the upstream developers as the project's history
rather than as maintainers of the fork.
|
|
The idle-sort comparator returned a 64-bit time difference truncated
to int, which could flip sign and leave the ordering inconsistent.
|
|
The index derived a repository's age from refs/heads/master alone, so a
repository on any other default branch showed no age. HEAD is
repo-controlled and the age stat walks under refs/heads, so a branch
name carrying a parent-directory component is rejected.
|
|
On a phone the description, owner and shortcut columns crowded the
index and pushed the age off screen, and tapping the name already
opens the repository, so the index collapses to name and age.
|
|
Everything the build generates now lands in build/, so a clean is a
single remove and the source tree stays free of build output.
|
|
These would be largely invalid anyway (save, I suppose, for Linux file
paths that technically can contain new lines).
The actual problem is that these get printed back out into cached -- and
trusted -- cgitrc files, and if the fields have newlines, the git-config
way of less trusted users configuring repos on a shared system can be
abused to inject newlines, which then can be used to smuggle global
options (including filters, which execute code) into the cached cgitrc.
So now, only ever duplicate up to the newline, when dealing with these
inputs.
Reported-by: Adrian Denkiewicz <adrian@doyensec.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
|
|
The title attribute was being set to the same value as the anchor
element text.
Signed-off-by: Chris Mayo <aklhfex@gmail.com>
Reviewed-by: Eric Wong <e@80x24.org>
Reviewed-by: Petr Vorel <petr.vorel@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
|
|
The function read_agefile() returns time_t, which is a signed datatime.
We should not return unsigned (negative) value here.
Reported-by: Johannes Stezenbach <js@linuxtv.org>
Signed-off-by: Christian Hesse <mail@eworm.de>
|
|
Signed-off-by: Christian Hesse <mail@eworm.de>
|
|
The man page states these were deprecated for v1.0. We are past v1.1,
so remove the functionality.
Signed-off-by: Christian Hesse <mail@eworm.de>
Reviewed-by: John Keeping <john@keeping.me.uk>
|
|
For implementing a ui-blame page, there is need for a function that
outputs a selection from a block of text, transformed for HTML output,
but with no further modifications or additions.
Signed-off-by: Jeff Smith <whydoubt@gmail.com>
Reviewed-by: John Keeping <john@keeping.me.uk>
|
|
Signed-off-by: Lukas Fleischer <lfleischer@lfos.de>
|
|
When empty repos exist, comparing them against an existing repo with a
good mtime might, with particular qsort implementations, not sort
correctly, because of this brokenness:
if (get_repo_modtime(r1, &t) && get_repo_modtime(r2, &t))
However, sorting by the age column works as expected, so anyway, to tidy
things up, we simply reuse that function.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
|
|
This is stolen from kernel.org css [0].
[0] https://git.kernel.org/cgit-korg-0.10.1.css
|
|
|
|
|
|
This affects the tooltip showing the full time and the case when a date
is sufficiently old to be shown in full rather than as an offset.
Signed-off-by: John Keeping <john@keeping.me.uk>
|
|
We never use any format other than FMT_SHORTDATE, so move that into the
function.
Signed-off-by: John Keeping <john@keeping.me.uk>
|
|
Return HTTP status code 404 Not found when querying a non-existent
repository, which signals to search engines that a repository no
longer exists. Further, some webservers such as nginx permit
logging requests to different files depending on the HTTP code.
Signed-off-by: Peter Colberg <peter@colberg.org>
|
|
Signed-off-by: Peter Colberg <peter@colberg.org>
|
|
readfile() can fail if the agefile is not readable. Make sure free()
does not free an ininitialized string.
Signed-off-by: Christian Hesse <mail@eworm.de>
|
|
Coverity-id: 13930
Signed-off-by: Christian Hesse <mail@eworm.de>
|
|
Coverity-id: 13931
Signed-off-by: Christian Hesse <mail@eworm.de>
|