* Fix a forkbomb in various calls to IPC::Open2, which has a highly
braindead interface. Closes: #389383master
parent
48e004acb1
commit
9f45c3080e
|
@ -4,7 +4,6 @@ package IkiWiki::Plugin::googlecalendar;
|
||||||
use warnings;
|
use warnings;
|
||||||
use strict;
|
use strict;
|
||||||
use IkiWiki;
|
use IkiWiki;
|
||||||
use IPC::Open2;
|
|
||||||
|
|
||||||
sub import { #{{{
|
sub import { #{{{
|
||||||
hook(type => "preprocess", id => "googlecalendar",
|
hook(type => "preprocess", id => "googlecalendar",
|
||||||
|
|
|
@ -19,21 +19,13 @@ sub import { #{{{
|
||||||
sub sanitize (@) { #{{{
|
sub sanitize (@) { #{{{
|
||||||
my %params=@_;
|
my %params=@_;
|
||||||
|
|
||||||
my $tries=10;
|
|
||||||
my $pid;
|
my $pid;
|
||||||
while (1) {
|
my $sigpipe=0;
|
||||||
eval {
|
$SIG{PIPE}=sub { $sigpipe=1 };
|
||||||
$pid=open2(*IN, *OUT, 'tidy -quiet -asxhtml -utf8 --show-body-only yes --show-warnings no --tidy-mark no');
|
$pid=open2(*IN, *OUT, 'tidy -quiet -asxhtml -utf8 --show-body-only yes --show-warnings no --tidy-mark no');
|
||||||
};
|
|
||||||
last unless $@;
|
|
||||||
$tries--;
|
|
||||||
if ($tries < 1) {
|
|
||||||
debug("failed to run tidy: $@");
|
|
||||||
return $params{content};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# open2 doesn't respect "use open ':utf8'"
|
# open2 doesn't respect "use open ':utf8'"
|
||||||
binmode (IN, ':utf8');
|
binmode (IN, ':utf8');
|
||||||
binmode (OUT, ':utf8');
|
binmode (OUT, ':utf8');
|
||||||
|
|
||||||
print OUT $params{content};
|
print OUT $params{content};
|
||||||
|
@ -44,6 +36,9 @@ sub sanitize (@) { #{{{
|
||||||
close IN;
|
close IN;
|
||||||
waitpid $pid, 0;
|
waitpid $pid, 0;
|
||||||
|
|
||||||
|
return $params{content} if $sigpipe;
|
||||||
|
$SIG{PIPE}="DEFAULT";
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
} # }}}
|
} # }}}
|
||||||
|
|
||||||
|
|
|
@ -63,18 +63,11 @@ sub genmap ($) { #{{{
|
||||||
# TODO: should really add the png to renderedfiles and call
|
# TODO: should really add the png to renderedfiles and call
|
||||||
# check_overwrite, but currently renderedfiles
|
# check_overwrite, but currently renderedfiles
|
||||||
# only supports listing one file per page.
|
# only supports listing one file per page.
|
||||||
my $tries=10;
|
|
||||||
my $pid;
|
my $pid;
|
||||||
while (1) {
|
my $sigpipe=0;;
|
||||||
eval {
|
$SIG{PIPE}=sub { $sigpipe=1 };
|
||||||
$pid=open2(*IN, *OUT, "dot -Tpng -o '$config{destdir}/$params{page}.png' -Tcmapx");
|
$pid=open2(*IN, *OUT, "dot -Tpng -o '$config{destdir}/$params{page}.png' -Tcmapx");
|
||||||
};
|
|
||||||
last unless $@;
|
|
||||||
$tries--;
|
|
||||||
if ($tries < 1) {
|
|
||||||
return "failed to run dot: $@";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# open2 doesn't respect "use open ':utf8'"
|
# open2 doesn't respect "use open ':utf8'"
|
||||||
binmode (IN, ':utf8');
|
binmode (IN, ':utf8');
|
||||||
binmode (OUT, ':utf8');
|
binmode (OUT, ':utf8');
|
||||||
|
@ -96,12 +89,18 @@ sub genmap ($) { #{{{
|
||||||
|
|
||||||
local $/=undef;
|
local $/=undef;
|
||||||
my $ret="<object data=\"".
|
my $ret="<object data=\"".
|
||||||
IkiWiki::abs2rel("$params{page}.png", IkiWiki::dirname($params{page})).
|
IkiWiki::abs2rel("$params{page}.png", IkiWiki::dirname($params{page})).
|
||||||
"\" type=\"image/png\" usemap=\"#linkmap$mapnum\">\n".
|
"\" type=\"image/png\" usemap=\"#linkmap$mapnum\">\n".
|
||||||
<IN>.
|
<IN>.
|
||||||
"</object>";
|
"</object>";
|
||||||
close IN;
|
close IN;
|
||||||
|
|
||||||
waitpid $pid, 0;
|
waitpid $pid, 0;
|
||||||
|
$SIG{PIPE}="DEFAULT";
|
||||||
|
if ($sigpipe) {
|
||||||
|
return "[[linkmap failed to run dot]]";
|
||||||
|
}
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
|
|
|
@ -43,21 +43,11 @@ sub htmlize (@) { #{{{
|
||||||
my %params=@_;
|
my %params=@_;
|
||||||
my $content=$params{content};
|
my $content=$params{content};
|
||||||
|
|
||||||
my $tries=10;
|
|
||||||
my $pid;
|
my $pid;
|
||||||
while (1) {
|
my $sigpipe=0;
|
||||||
eval {
|
$SIG{PIPE}=sub { $sigpipe=1 };
|
||||||
# Try to call python and run our command
|
$pid=open2(*IN, *OUT, "python", "-c", $pyCmnd);
|
||||||
$pid=open2(*IN, *OUT, "python", "-c", $pyCmnd)
|
|
||||||
or return $content;
|
|
||||||
};
|
|
||||||
last unless $@;
|
|
||||||
$tries--;
|
|
||||||
if ($tries < 1) {
|
|
||||||
debug("failed to run python to convert rst: $@");
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# open2 doesn't respect "use open ':utf8'"
|
# open2 doesn't respect "use open ':utf8'"
|
||||||
binmode (IN, ':utf8');
|
binmode (IN, ':utf8');
|
||||||
binmode (OUT, ':utf8');
|
binmode (OUT, ':utf8');
|
||||||
|
@ -70,6 +60,9 @@ sub htmlize (@) { #{{{
|
||||||
close IN;
|
close IN;
|
||||||
waitpid $pid, 0;
|
waitpid $pid, 0;
|
||||||
|
|
||||||
|
return $content if $sigpipe;
|
||||||
|
$SIG{PIPE}="DEFAULT";
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
} # }}}
|
} # }}}
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,10 @@ ikiwiki (1.28) UNRELEASED; urgency=low
|
||||||
|
|
||||||
* inline: Add ability to sort by page name, based on a patch from
|
* inline: Add ability to sort by page name, based on a patch from
|
||||||
Benjamin A'Lee.
|
Benjamin A'Lee.
|
||||||
|
* Fix a forkbomb in various calls to IPC::Open2, which has a highly
|
||||||
|
braindead interface. Closes: #389383
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Mon, 25 Sep 2006 17:06:39 -0400
|
-- Joey Hess <joeyh@debian.org> Mon, 25 Sep 2006 17:22:52 -0400
|
||||||
|
|
||||||
ikiwiki (1.27) unstable; urgency=low
|
ikiwiki (1.27) unstable; urgency=low
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue