[[plugins/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/__tmp__recentchanges-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 [[debbug 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]]