recentchangesdiff causes rendering to segfault if a commit removes a lot of contents. I removed close to 400 files, total size of about 950Kb in a single commit and now ikiwiki segfaults on refresh and rebuild:

[...]
rendering recentchanges.mdwn
[1]    5541 segmentation fault  ikiwiki --verbose --setup ikiwiki.setup --refresh

If I disable the plugin, the segfault does not happen, but I have to remove wc/recentchanges/* or else it will crash just as well.

This is reproducible, but I cannot provide the source code.

Can you provide a sanitised version of the source code? I've tried ikiwiki on some files that are just large, and cannot reproduce any problems, so it must be something in the specific file. (A perl bug is also clearly involved here.) --Joey

The tarball is at http://scratch.madduck.net/tmprecentchanges-segfault.tgz - unpack it in /tmp and chdir() to /tmp/cdt.taF18912, then run

ikiwiki --setup ikiwiki.setup
# segfaults
git checkout HEAD^
ikiwiki --setup ikiwiki.setup
# segfaults
rm -rf wc/recentchanges
ikiwiki --setup ikiwiki.setup
# works

I can reproduce it fine with that, thanks, and it's really looking like a pure perl bug, that is triggered by markdown. Here's a simpler test case:

joey@kodama:/tmp>markdown < f
zsh: segmentation fault  markdown < f

Where f is a 6.3 mb file that I extracted from ikiwiki's rendering pipeline.

It seems to be crashing at markdown line 345, which is a big nasty s/// statement.

The good news: markdown version 1.0.2~b8-2 does not trigger this perl bug. I only see it with 1.0.1. (Bad news: Newer versions of markdown are slooooooow, especially on such large files.)

I'm calling this done since I've filed Debian bug #470676 on perl, and also have modified recentchangesdiff to only show the first 200 lines of diff, which should be enough without bloating the recentchanges into perl-crashing territory. --Joey