X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/d7f1292c3134fd9464ca4005f48b9274be861c10..de468ba12dfc0891145b3f8b432eb97b70b60c0c:/IkiWiki/Plugin/external.pm diff --git a/IkiWiki/Plugin/external.pm b/IkiWiki/Plugin/external.pm index a30ef3f61..204442c1e 100644 --- a/IkiWiki/Plugin/external.pm +++ b/IkiWiki/Plugin/external.pm @@ -68,7 +68,22 @@ sub rpc_call ($$;@) { #{{{ return @{$value->value}; } elsif ($value->isa('RPC::XML::struct')) { - return %{$value->value}; + my %hash=%{$value->value}; + + # XML-RPC v1 does not allow for + # nil/null/None/undef values to be + # transmitted, so until + # XML::RPC::Parser honours v2 + # (), external plugins send + # a hash with one key "null" pointing + # to an empty string. + if (exists $hash{null} && + $hash{null} eq "" && + int(keys(%hash)) == 1) { + return undef; + } + + return %hash; } else { return $value->value; @@ -92,6 +107,14 @@ sub rpc_call ($$;@) { #{{{ error("XML RPC call error, unknown function: $name"); } + # XML-RPC v1 does not allow for nil/null/None/undef + # values to be transmitted, so until XML::RPC::Parser + # honours v2 (), send a hash with one key "null" + # pointing to an empty string. + if (! defined $ret) { + $ret={"null" => ""}; + } + my $string=eval { RPC::XML::response->new($ret)->as_string }; if ($@ && ref $ret) { # One common reason for serialisation to @@ -150,8 +173,9 @@ sub setstate ($$$$;@) { #{{{ my $page=shift; my $id=shift; my $key=shift; + my $value=shift; - return $IkiWiki::pagestate{$page}{$id}{$key}=@_; + return $IkiWiki::pagestate{$page}{$id}{$key}=$value; } #}}} sub getargv ($) { #{{{ @@ -162,8 +186,9 @@ sub getargv ($) { #{{{ sub setargv ($@) { #{{{ my $plugin=shift; + my $array=shift; - @ARGV=@_; + @ARGV=@$array; } #}}} sub inject ($@) { #{{{