aboutsummaryrefslogtreecommitdiff
path: root/doc/bugs/recentchangesdiff_crashes_on_commits_which_remove_a_lot_of_files.mdwn
blob: b3578f26ab107d919487631b14e2e93531a9285a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[[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]]