aboutsummaryrefslogtreecommitdiff
path: root/doc/bugs/methodResponse_in_add__95__plugins.mdwn
blob: c82b532db9c3f30e3687e7e074da0228718e16c3 (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
**problem description:** when using an external plugin like rst, the cgi script (but not the build process) fails with the following words:

    Unsuccessful stat on filename containing newline at /usr/share/perl5/IkiWiki.pm line 501.
    Unsuccessful stat on filename containing newline at /usr/share/perl5/IkiWiki.pm line 501.
    Failed to load plugin IkiWiki::Plugin::</methodResponse>
    : Can't locate IkiWiki/Plugin/.pm in @INC (@INC contains: /home/ikiwiki/.ikiwiki /etc/perl \
    /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 \
    /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at (eval 44) line 3. 
    BEGIN failed--compilation aborted at (eval 44) line 3.

**setup used:** blank debian sid with ikiwiki 2.61 (but as the patch can be cleanly merged to git HEAD, i suppose this would happen on HEAD as well). perl version is 5.10.0-13.

**problem analysis:** `strings ikiwiki.cgi` tells that the stored WRAPPED\_OPTIONS contain the string "&lt;/methodResponse&gt;\n" where i'd expect "rst" in `config{add_plugins}`. this seems to originate in the use of `$_` in the plugin loading function.

**patch comment:** solves the problem on 2.61. as these are the first lines of perl i've knowingly written, i can not explain what exactly was happening there.

> Perl's `$_` handling is the worst wart on it, or possibly any language.
> Here it's an alias to the actual value in the array, and when deep
> in the external plugin load code something resets `$_` to a different
> value, the alias remains and it changes the value at a distance.
> 
> Thanks for the excellent problem report, [[fixed|done]]. --[[Joey]]

------------------------------------------------------------------------------
    diff --git a/IkiWiki.pm b/IkiWiki.pm
    index e476521..d43abd4 100644
    --- a/IkiWiki.pm
    +++ b/IkiWiki.pm
    @@ -471,7 +471,11 @@ sub loadplugins () {
                    unshift @INC, possibly_foolish_untaint($config{libdir});
            }
     
    -       loadplugin($_) foreach @{$config{default_plugins}}, @{$config{add_plugins}};
    +       my $pluginname;
    +       foreach $pluginname (@{$config{default_plugins}}, @{$config{add_plugins}})
    +       {
    +               loadplugin($pluginname);
    +       }
     
            if ($config{rcs}) {
                    if (exists $IkiWiki::hooks{rcs}) {