AgeCommit message (Collapse)AuthorLines
Answer dumb-clone HEAD from the ref storeBryce Kwon-5/+53
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.
Make two branch conditions say what they rely onBryce Kwon-2/+2
cgit_parse_url tested ctx.repo where the loop sets repo_end alongside it, and the log's closing link kept a commit it never read. Clang's analyzer tripped on both.
Close the tree row when a link target is unreadableBryce Kwon-10/+14
The row stopped at the error and left its cells open, so the rest of the listing rendered inside it.
Correct three comments that drifted from the codeBryce Kwon-6/+7
Cut text between characters, never inside oneBryce Kwon-9/+34
The index description was cut at a byte count, which could split a multibyte character and leave an invalid sequence on the page. Commit subjects already backed up to the start of the character, so html_ntxt now does that for every caller.
Verify the git tarball against its published sumBryce Kwon-2/+11
get-git built whatever the download produced. The tarball is now checked against the SHA-256 kernel.org publishes before it is unpacked, so a corrupt or substituted file stops there.
Check cgit under sparse in its own dialectBryce Kwon-1/+3
The sparse rule put git's SPARSE_FLAGS last, and their -std=gnu99 overrode the gnu17 the sources are built as.
Drop the NO_C99_FORMAT switch nothing readsBryce Kwon-4/+0
Neither cgit nor the bundled Git reads the macro it defined.
Keep the two builds from sharing vendor/git at onceBryce Kwon-0/+5
make -j cgit cgit-nolua ran both sub makes in the one Git tree side by side, compiling the same objects and archiving libgit.a twice at once.
Build with the compiler the release script probedBryce Kwon-2/+4
Git's Makefile sets CC = cc, which wins over a CC in the environment, so CC=clang ./tools/release-build.sh probed clang's flags and then built with cc.
Find libc's write when git writes firstBryce Kwon-0/+12
A Lua build replaces write, and git can write before cmd_main reaches cgit_init_filters, as it does when GIT_TRACE2 is set, which called through a null pointer and crashed every request.
Read a negative ref count as no limitBryce Kwon-13/+33
summary-branches, summary-tags and max-ref-count already listed every ref at 0, but a negative value reached qsort as a count and crashed the summary and refs pages, and emptied the branch switcher.
Page a followed log by the name asked forBryce Kwon-6/+15
Each row of a followed log moves ctx.qry.vpath to the name its commit knew the file by, and the pager built its links from that, so past a rename both links named the old file and led to an empty page.
Show the root commit in a followed logBryce Kwon-13/+50
A followed log diffs each commit against its parent to learn whether the file changed there, and a root commit was skipped rather than diffed against the empty tree, so a file created in the first commit never showed that commit.
Peel an annotated tag before looking for a readmeBryce Kwon-0/+15
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.
Encode repository urls and the feed branchBryce Kwon-27/+67
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.
Hold object sizes in size_t as git 2.55 doesBryce Kwon-37/+37
Git 2.55 moved object sizes from unsigned long to size_t. The two are the same type on 64-bit hosts, but not on a 32-bit one, where GCC 14 rejects the mismatched pointers, so cgit stopped compiling there.
Say how to build cgit on muslBryce Kwon-0/+6
Git's code there needs the kernel headers and its bundled regex, and the build failed with nothing to say so.
Build Git without translations or Tcl toolsBryce Kwon-10/+11
cgit never shows Git's translations or runs its Tcl tools, yet building needed libintl and msgfmt for one and, under make test, tclsh for the other, which a musl system such as Alpine lacks.
Name every Lua filter failure in the logBryce Kwon-9/+30
A script raising anything but a string handed die a null to print, and a Lua state that could not be created was used anyway once the filter closed.
Let a Lua script write while it loadsBryce Kwon-2/+26
A script's top level runs before cgit hooks stdout for it, and the unhook html() began with tripped an assert that aborted cgit.
Claim and test Lua 5.5 for every extensionBryce Kwon-20/+20
luaossl from release 20260910 and luaposix load under Lua 5.5, and cgit renders the same pages under it as under LuaJIT. Running the suites there already caught a write to a for loop's control variable, which 5.5 makes read-only.
Detect Lua 5.5 when buildingBryce Kwon-4/+4
cgit builds against Lua 5.5 and serves the same pages with it, but a host whose only Lua was 5.5 got a binary without Lua from the search.
Drop the highlighter's stale guard and dead branchBryce Kwon-11/+2
cgit runs as a CGI, so no interpreter outlives its request, and the lexers load once per process. The loop below already wrote nothing for an empty blob.
Find a script's lexer from its shebang lineBryce Kwon-7/+16
Scintillua's detect reads the first line as well as the name, and without it hooks, bin scripts and anything else lacking an extension stayed plain.
Ship the example tracker links commented outBryce Kwon-24/+43
An unedited copy sent every #123, Closes: and Bug: mark to bugs.example.com, a link that is wrong for every site.
Say that a protected repository stays on the indexBryce Kwon-0/+8
Name the auth cookie __Host- where it can beBryce Kwon-30/+71
Without the prefix any host under the same domain could set a cgitauth cookie of its own, signing a visitor in as someone else or out.
End a session when its account's hash changesBryce Kwon-62/+108
A session stayed good for its whole week after the password changed or the account went away, which is when ending it matters most.
Load auth libraries only when a request needs oneBryce Kwon-18/+63
Required at the top, a missing luaossl or luaposix failed every request to the site, public pages included, and each public page paid to load both.
Say which hash kinds each system's crypt checksBryce Kwon-4/+27
The one recipe given, SHA-512 from Debian's mkpasswd, cannot log anyone in on OpenBSD, whose crypt checks only bcrypt, or on macOS, and libxcrypt, which most Linux distributions use, recommends yescrypt instead.
Spend a missing account's login on a real hashBryce Kwon-57/+99
The fixed SHA-512 stand-in matched only the documented setup, so a site hashing with yescrypt, other rounds or bcrypt answered for missing and real names in different times, and on OpenBSD it failed at once.
Turn down passwords past 256 bytes uncheckedBryce Kwon-2/+32
SHA-crypt hashes the password in most of its rounds, so the 4 KB that cgit's POST limit lets through cost about fifteen ordinary logins per anonymous attempt.
Read the auth cookie in linear timeBryce Kwon-14/+52
Splitting the header with patterns that backtrack over spaces cost a quarter of a second per request at the 8 KB line most web servers allow, and a second at 16 KB, without any login. auth-file's trim had the same shape and now reads the cookie as well.
Offer avatars at twice the size to dense screensBryce Kwon-14/+23
The 13 pixel icon came out blurred on the high density screens most phones and laptops have.
Hash avatar addresses with SHA-256Bryce Kwon-13/+16
Gravatar's documentation now describes SHA-256 hashes on gravatar.com alone, and Libravatar has long accepted them beside MD5.
Mark avatar icons as decorativeBryce Kwon-11/+7
A screen reader announced the service's name before every author.
Unwrap an avatar address in linear timeBryce Kwon-6/+19
An author email of 16,000 "<" took three quarters of a second per log row, and one of 64,000 took twelve seconds.
Draw no avatar when luaossl is missingBryce Kwon-15/+41
The require at the top raised as cgit loaded the filter, so every page that lists an author stopped at its first author cell with an error.
Drop the table loop's dead blank-line testBryce Kwon-1/+1
A line holding a pipe is never blank.
Compare the cached page with the uncached one wholeBryce Kwon-5/+1
The footer lost the time it was generated at in 2018, and both runs come from the same binary, so the two pages have nothing to differ in.
Give an empty repository's clone table its hooksBryce Kwon-10/+21
It was a bare table.list with no name, section or label, the one listing that broke what the README promises a theme.
Check every markup hook the README namesBryce Kwon-8/+84
The README promised that t0005 checked them all, while fourteen went unchecked, and three of its claims were too broad. A date shown in full carries no age hooks, line anchors follow enable-tree-linenumbers and cgit.css also styles html.cgit-standalone.
Complete the README's pages and query parametersBryce Kwon-3/+14
List everything make install puts in placeBryce Kwon-3/+4
Add blame to the source filter and line number docsBryce Kwon-15/+23
Name every trailer link-trailers.lua linksBryce Kwon-6/+6
Say that js may be given more than onceBryce Kwon-3/+24
Fix the sample cgitrc's defaults and value syntaxBryce Kwon-13/+16
Add html serving to the scanned cgitrc trust listBryce Kwon-3/+4
1456483 gated the key and named it under trust-scan-config, but this section kept the list from before.