AgeCommit message (Collapse)AuthorLines
Show characters a browser breaks at as escapesBryce Kwon-0/+79
The HTML parser turns a carriage return with no line feed after it into a line feed, and WebKit starts a new line at U+2028 and U+2029, while git and the line numbers count line feeds alone, so each one set every later line of the tree and blame pages a line below its number. CSS Text makes vertical tab, form feed and next line forced breaks as well, though no engine honours that yet. The escapes follow gitweb, which shows control characters the same way.
Keep every control byte out of a header valueBryce Kwon-0/+4
A quoted header value escaped only the quote, the backslash, CR and LF. A web server refuses a response whose header holds any other control byte, so a file named with one could not be downloaded at all.
Cut text between characters, never inside oneBryce Kwon-0/+6
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.
Encode repository urls and the feed branchBryce Kwon-0/+12
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.
Read and write slot keys and pages in fullBryce Kwon-1/+5
xread and xwrite may move fewer bytes than asked. A short write of the key left a slot that could never match, a short read of it reported a collision, and a page write that moved nothing looped for ever.
Keep the error of a request that dies mid captureBryce Kwon-0/+1
The commit and diff pages collect each file's body before printing it, and a die in git while one was collected wrote the error page into that body, which was never sent, so the visitor got a page cut off mid table.
End a request quietly when the client has goneBryce Kwon-2/+18
A write that failed with EPIPE on an uncached page died into an error page, which died again at exit when the page could not be sent either, and git logged a recursion warning on every dropped connection. A filter that exits early fails a write the same way, so the quiet exit is kept for writes that reach the client itself.
Keep the query string across the about redirectsBryce Kwon-0/+22
The hop to the trailing-slash form of the about page, and the hop back to the summary of a repository without a readme, were built from the path alone, so a request for the about page of another branch landed on the default one. The query goes into the Location line as the client sent it, with any byte a header cannot carry percent-encoded.
Harden the request path, scan and error recoveryBryce Kwon-4/+28
Read every query parameterBryce Kwon-1/+3
A parameter without a value swallowed the parameter after it.
Clean up the whole treeBryce Kwon-10/+5
Trim the comments and dead code across the treeBryce Kwon-12/+10
Log scan lock failures that are not contentionBryce Kwon-2/+2
Drop the XHTML slashes and boolean spellingsBryce Kwon-4/+4
Fix ampersand handling in generated urlsBryce Kwon-24/+26
Restyle the sources and fix the audit's findingsBryce Kwon-141/+136
Render each diff body while its file is openBryce Kwon-0/+27
Gather page output into one bufferBryce Kwon-2/+45
Settle the names, types and layout of the sourcesBryce Kwon-3/+3
Point the fork's links and credits at itselfBryce Kwon-1/+1
AUTHORS now records the upstream developers as the project's history rather than as maintainers of the fork.
Reorganize into source, assets and librariesBryce Kwon-0/+344
The C sources move to source/, the served files to assets/, the bundled Git submodule to libraries/git and the filter scripts to extensions/. Everything the build generates now lands in build/, so a clean is a single remove and the tree stays clean.