<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cgit, branch main</title>
<subtitle>Fork of cgit with my patches.</subtitle>
<id>http://git.kilabit.info/cgit/atom?h=main</id>
<link rel='self' href='http://git.kilabit.info/cgit/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/'/>
<updated>2026-04-14T14:17:11Z</updated>
<entry>
<title>cmd/cgitd: HTTP server for cgit CGI</title>
<updated>2026-04-14T14:17:11Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-04-14T10:09:12Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=3cf0fd6460e828b2d39afe5b5673c4d0d2fdf24a'/>
<id>urn:sha1:3cf0fd6460e828b2d39afe5b5673c4d0d2fdf24a</id>
<content type='text'>
This program can be built into single binary, provides as an alternatives
to common setup that require second application (web server with their own
configuration).
</content>
</entry>
<entry>
<title>cache: truncate lock file before filling</title>
<updated>2026-04-13T17:04:38Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-04-13T17:02:31Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=829eb0711305e8946fa2f4a1c57c43354f35e208'/>
<id>urn:sha1:829eb0711305e8946fa2f4a1c57c43354f35e208</id>
<content type='text'>
lock_slot() opens the lock file with O_RDWR|O_CREAT but without
O_TRUNC. If a previous cgit process was killed between lock_slot() and
unlock_slot() (e.g. by a CGI timeout or OOM), the stale lock file
remains on disk with the old content, and the kernel releases the fcntl
lock.

The next process to claim the same cache slot then opens this stale lock
file, acquires the fcntl lock, writes its key and generated content on
top of the old bytes. If the new response is shorter than what was
previously in the file, trailing bytes from the old response survive
beyond the end of the new content. fstat() in fill_slot() reports the
total file size (including the stale tail), and print_slot() faithfully
sends all of it -- producing a response that is the correct page
followed by a fragment of whatever previously occupied that lock file.

Fix this by truncating the lock file after acquiring the lock and before
writing the new key.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>cgit: override die routine globally</title>
<updated>2026-03-10T21:19:00Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-03-10T20:26:55Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=0d8e5fbc31e1082063bfb5155c35b7869721152b'/>
<id>urn:sha1:0d8e5fbc31e1082063bfb5155c35b7869721152b</id>
<content type='text'>
We don't get any return value from compile_grep_patterns calling
compile_regexp_failed, causing the default die routine to print to
stderr and then for cgit to exit ungracefully.

Instead override the default die routine to show a normal error page.

Perhaps compile_grep_patterns ought to change upstream to return an
error. But this commit here will handle future issues as well, so
perhaps not a bad idea to do anyway.

Link: https://lists.zx2c4.com/pipermail/cgit/2026-March/004982.html
Link: https://lists.zx2c4.com/pipermail/cgit/2026-March/004983.html
Reported-by: Adrian C. &lt;anrxc@sysphere.org&gt;
Reported-by: Aiden Woodruff &lt;aiden@aidenw.net&gt;
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>ui-log: allow link following to be disabled per-repo</title>
<updated>2026-02-24T10:49:35Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-02-24T10:48:54Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=0d28d54f0a287ee3e5a12d14ffd2ee23b5e22d76'/>
<id>urn:sha1:0d28d54f0a287ee3e5a12d14ffd2ee23b5e22d76</id>
<content type='text'>
This exists for other CPU heavy operations like blame, but doesn't for
the follow functionality. Add it for that.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>Bump version</title>
<updated>2026-02-24T01:44:41Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-02-24T01:41:55Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=61ef851ef52c3094d12fefad3576262606fddd27'/>
<id>urn:sha1:61ef851ef52c3094d12fefad3576262606fddd27</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>ui-log: don't free diff object when outputting diff</title>
<updated>2026-02-24T01:36:59Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-02-24T01:35:18Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=29d8c62437c71410061daa6a1b3ec0ec566eb559'/>
<id>urn:sha1:29d8c62437c71410061daa6a1b3ec0ec566eb559</id>
<content type='text'>
In git 2.36, the logic for diff_flush() changed, resulting in our object
getting freed, which led to following renames producing garbage commits
until it eventually crashed.

Fixes: bb02e24 ("git: update to v2.36.0")
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>css: round border edges for deco</title>
<updated>2026-02-23T23:39:05Z</updated>
<author>
<name>Christian Hesse</name>
<email>mail@eworm.de</email>
</author>
<published>2024-07-23T10:08:00Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=7fee3f699226a476a754fab7e1f0be5a559388da'/>
<id>urn:sha1:7fee3f699226a476a754fab7e1f0be5a559388da</id>
<content type='text'>
Signed-off-by: Christian Hesse &lt;mail@eworm.de&gt;
</content>
</entry>
<entry>
<title>css: highlight line in diff...</title>
<updated>2026-02-23T23:39:05Z</updated>
<author>
<name>Loïc</name>
<email>lagiraudiere+cgit@free.fr</email>
</author>
<published>2024-02-03T14:59:57Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=05ce954cf016bae560b51c31080d65ddc5910cc2'/>
<id>urn:sha1:05ce954cf016bae560b51c31080d65ddc5910cc2</id>
<content type='text'>
... specified in the URL, with a curved arrow ahead of the line number.

Signed-off-by: Loïc &lt;lagiraudiere+cgit@free.fr&gt;
Signed-off-by: Christian Hesse &lt;mail@eworm.de&gt;
</content>
</entry>
<entry>
<title>Makefile: fix uninstall to remove filters</title>
<updated>2026-02-23T23:39:05Z</updated>
<author>
<name>Christian Barcenas</name>
<email>christian@cbarcenas.com</email>
</author>
<published>2025-08-21T19:46:45Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=67672fb536cd1aa0222295f0938c412eb87d6449'/>
<id>urn:sha1:67672fb536cd1aa0222295f0938c412eb87d6449</id>
<content type='text'>
Signed-off-by: Christian Barcenas &lt;christian@cbarcenas.com&gt;
Signed-off-by: Christian Hesse &lt;mail@eworm.de&gt;
</content>
</entry>
<entry>
<title>Makefile: fix uninstall to remove js and robots.txt</title>
<updated>2026-02-23T23:39:05Z</updated>
<author>
<name>Christian Barcenas</name>
<email>christian@cbarcenas.com</email>
</author>
<published>2025-08-21T19:46:41Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/cgit/commit/?id=33684088138c442b7adedeacb78dc07bbdf23b91'/>
<id>urn:sha1:33684088138c442b7adedeacb78dc07bbdf23b91</id>
<content type='text'>
Signed-off-by: Christian Barcenas &lt;christian@cbarcenas.com&gt;
Signed-off-by: Christian Hesse &lt;mail@eworm.de&gt;
</content>
</entry>
</feed>
