| Age | Commit message (Collapse) | Author | Lines |
|
Three tests exercised the single path check in about_fn, each through
one kind of readme, and none through a readme read from the head being
browsed.
|
|
The status check now also fails on a second status line, which a page
that dies after its headers puts out, so every request is held to one
answer rather than the few that counted.
|
|
They take a plain tar, which needs no compressor on the machine.
|
|
|
|
The notes test had borrowed its repository, so it now builds one.
|
|
Its message came from a here-document with a dash, which stripped the
tab git knows a Conflicts path by. git then found no trailer block at
all, so the test passed with the guard it is about removed. The message
is now written with printf.
|
|
repos/rob took commits, refs, tags, a repack and a moved HEAD from test
after test, so what a test checked hung on the ones before it. A test
that changes a repository, or needs one in a shape of its own, now
builds it, and rob is only read. The tests that leaned on a config or a
scanned repository an earlier test left build their own too.
|
|
Each now writes a types file and config of its own rather than
rewriting the one the test before it left.
|
|
The test ran gzip without the GZIP prerequisite t0110 uses for the same
need, and it took a file-1 anywhere in the listing rather than under the
tag's own prefix.
|
|
An unquoted $cgitbin breaks in a checkout whose path holds a space,
and head -c and head -1 are not POSIX. The status of the disconnected
request is still read right after its pipeline, which assumes the
shell waits for the left side as dash, bash, ksh and busybox ash all
do.
|
|
A loose ref written by hand needs the files backend, so under
GIT_TEST_DEFAULT_REF_FORMAT=reftable the broken tree test failed, and
the die test after it with it, since it borrowed that clone. It now
makes its own. Both index tests that stat a path through refs/heads
also passed there with their checks gone, as reftable keeps
refs/heads as a file. The commit is rewritten through files rather
than a pipeline that hid cat-file failing.
|
|
The expected content was "more" only because an earlier test had
rewritten file-1, and the next test reused that file and the tag. The
tag.gpgsign override did nothing, since test-lib already keeps the
user's config out.
|
|
The expected count of 2 held only because earlier tests had made
a.git and b.git and one of them had dropped b.git's cgitrc.
|
|
The count was bounded only from above, and loosely, so a page listing
no directories passed, as would a limit of 16. t0104's long directory
chain test already pins the bound exactly.
|
|
The blob came out of a pipeline whose failure would have left it empty
and the test passing, and nothing looked at the row itself. head -c is
not POSIX either.
|
|
HEAD was put back inside the && chain after cgit ran, so a failure left
repos/rob on a missing branch for every later test. The switcher check
also read the page this test left, and now runs in the same test.
|
|
Unlike its siblings the test never counted status lines, so a second
page after the first went unnoticed. The headers are out by the time
the diff is collected, so the one answer stays a 200 holding the
error.
|
|
cache_process bypasses a ttl of 0 and fails quietly in many ways, so
with a dead cache the test passed whatever ttl the page got. A second
config that keeps the same page for ever now has to replay it, from a
cache of its own, since slots are keyed on the request alone.
|
|
Every page ends in </html>, the 404 for no repositories included, and
an index, an error page or a page cut short lacks most things, so the
path-less repository, the empty url, the page without an auth filter
and the refused id each now show the page that was meant to render.
|
|
The loop asserted only absences, so a 404 or any error but the die
text passed, and the final 404 is also what a name that resolves to
nothing gets.
|
|
The test opened the inner tag by id and never looked at the outer
tag's page or the link the title is about.
|
|
The log walks the history before it prints a row, so nothing ahead of
the gap ever renders and the title promised more than the page shows.
The test also took its gap from the shared repository, where HEAD~2
was a given commit only because of tests run before it.
|
|
The email filter was handed a few bytes, which usually sit in the pipe
before the filter has even exited, so a cgit that died of SIGPIPE
passed most runs. A source filter handed more than a pipe holds has to
see the write fail.
|
|
git's read_mailmap_blob inflates the whole blob, so a pusher could make
every page of a repository read as much as they liked. git reads a
note and the .gitmodules file whole as well, and capping those would
mean bounding the lookups where the log, commit and tree pages make
them, so the manual names them instead. Nothing tested that
mailmap.file and mailmap.blob are ignored either.
|
|
A scanned repository sets its description, owner and section without
trust, and no test gave them any markup.
|
|
t0104's binary fixture never turns blame on, so neither the blame
page's own refusal nor the missing link on the file's page had a test.
|
|
The defbranch check had a test while its twin for a crafted HEAD,
which the index reads the same way to date a repository, had none.
|
|
The allowlist was tested in two places, and the 404 alone did not show
the transport was live behind the auth filter, since a page that does
not exist answers the same. A loose object and HEAD now have to come
through, and the planted alternates file is removed even when the test
fails, where it used to leave rob borrowing foo's objects.
|
|
Only head-content and logo-link were tried, so logo, clone-url and
both module-link forms could have been taken from a repository's own
cgitrc unnoticed. A trusted control shows each value would reach the
page, and the refused disk readmes are now checked against a file that
would show if read.
|
|
Every candidate name meets check_refname_format first, which refuses
the old payload, so the slash rule never answered it and could go
unnoticed. A tag holding a slash reaches it, and a name in revision
syntax without a slash now pins the ref name check of its own.
|
|
dash reports a write to a closed pipe as an I/O error and never names
a broken pipe, so where sh is dash the test passed with the reset
removed. The writer now leaves a marker when it outlives the closed
pipe, which it can only do with the signal ignored. That holds under
dash, bash and ksh.
|
|
Both tests passed or failed with the order in which cgit and the exec
filter happened to run, about one run in four under UBSan.
|
|
The one-line request wrappers go with them. Configs with several
repositories, a key out of place on purpose, the cache on or no
repository of their own stay written out.
|
|
All of them stop at the same early return in about_fn, so each now gets
the status, the html error page and a clean log.
|
|
|
|
The trash directory starts empty and setup.sh already made the cache,
the clamp check already fails on a short query, and the commit the setup
named is still there to pin.
|
|
t0103 already renders foo/log and finds commit 5, and its search for a
bracket fails the same way this literal search did if --fixed-strings
ever goes.
|
|
When a filter cannot run, cgit dies mid-page with its Status line
already out, so the check passed with no filter at all. That is the
case wherever true lives only in /bin, as on busybox. true now comes
from the PATH, and the page has to reach its end.
|
|
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.
|
|
A pusher can point refs/notes/commits or a signature notes ref at any
object, and git dies loading one that is no tree, which ended every page
of the repository, the dumb transport included.
|
|
A date past what the system holds, a zone that is no hhmm offset, or a
date earlier than its own westward offset all made git die inside
show_date, which took the summary, refs, log, commit and feed pages of
the repository down. They are now clamped as git's own log clamps them.
|
|
The chrome renders on an error page too, where the id had just been
refused for using the wider revision syntax, and then looked it up
anyway. A :/pattern id walks the whole history for a match.
|
|
The object path check let any run of safe characters through, so a
spelling such as info//alternates or info/./alternates reached the
alternates file the exact name was refused for.
|
|
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.
|
|
A readme past max-blob-size is never read, which left the about page
with an empty block and no word of why.
|
|
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.
|
|
A reftable repository keeps only a placeholder in its HEAD file, so a
dumb clone was told HEAD named refs/heads/.invalid and checked nothing
out. HEAD is now answered the way git's http-backend answers it.
|
|
Tag links carry the tag name as the head, so on any page reached from
an annotated tag the about tab vanished and the about page redirected
to the summary.
|
|
Links built from the repository url, among them the description link
on the index and the Atom and refs links, wrote it as configured, so a
name holding a space, '#' or '?' broke them. The feed link in the page
head did the same with the branch, which turned a '+' into a space.
|
|
|