Index: src/infrastructure/markup/interpreter/PhabricatorRemarkupBlockInterpreterCowsay.php =================================================================== --- src/infrastructure/markup/interpreter/PhabricatorRemarkupBlockInterpreterCowsay.php +++ src/infrastructure/markup/interpreter/PhabricatorRemarkupBlockInterpreterCowsay.php @@ -29,6 +29,7 @@ $tongue, $cow); + $future->setTimeout(15); $future->write($content); list($err, $stdout, $stderr) = $future->resolve(); Index: src/infrastructure/markup/interpreter/PhabricatorRemarkupBlockInterpreterFiglet.php =================================================================== --- src/infrastructure/markup/interpreter/PhabricatorRemarkupBlockInterpreterFiglet.php +++ src/infrastructure/markup/interpreter/PhabricatorRemarkupBlockInterpreterFiglet.php @@ -14,6 +14,7 @@ } $future = id(new ExecFuture('figlet')) + ->setTimeout(15) ->write(trim($content, "\n")); list($err, $stdout, $stderr) = $future->resolve(); Index: src/infrastructure/markup/interpreter/PhabricatorRemarkupBlockInterpreterGraphviz.php =================================================================== --- src/infrastructure/markup/interpreter/PhabricatorRemarkupBlockInterpreterGraphviz.php +++ src/infrastructure/markup/interpreter/PhabricatorRemarkupBlockInterpreterGraphviz.php @@ -14,6 +14,7 @@ } $future = id(new ExecFuture('dot -T%s', 'png')) + ->setTimeout(15) ->write(trim($content)); list($err, $stdout, $stderr) = $future->resolve(); @@ -21,7 +22,9 @@ if ($err) { return $this->markupError( pht( - 'Execution of `dot` failed, check your syntax: %s', $stderr)); + 'Execution of `dot` failed (#%d), check your syntax: %s', + $err, + $stderr)); } $file = PhabricatorFile::buildFromFileDataOrHash(