summaryrefslogtreecommitdiff
path: root/doc/bugs/Warns_about_use_of_uninitialized_value_if_prefix__95__directives_is_on_and_a_directive_does_not_contain_a_space.mdwn
blob: efb5c70b868421c895e0e178d03b23d52c3179a2 (plain)

In IkiWiki::preprocess, the last capturing group in the regex used to parse directives in prefix_directives mode is of the form (\s+...)?\]\], which will not be matched if the directive is something without arguments or whitespace, like \[[!orphans]]. As a result, its value is undef instead of being an empty string, causing a warning when it is used in the anonymous sub $handle. A trivial fix is to treat it as "" if it is undef.

[[patch]] in the master branch of my git repository, and quoted here. --[[smcv]]

diff --git a/IkiWiki.pm b/IkiWiki.pm
index 241a7c0..d2c35a2 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -1167,7 +1167,8 @@ sub preprocess ($$$;$$) {
                }sx;
        }
 
-       $content =~ s{$regex}{$handle->($1, $2, $3, $4)}eg;
+       # $4 can be undef if the directive was \[[!foo]]
+       $content =~ s{$regex}{$handle->($1, $2, $3, ($4 or ""))}eg;
        return $content;
 }

[[cherry-picked|done]] --[[Joey]]