@@ -58,7 +58,7 @@ import qualified Control.Exception as E
5858import Control.Exception.Extensible ( throwIO )
5959import qualified Text.Pandoc.UTF8 as UTF8
6060import Control.Monad (when, unless, (>=>))
61−import Data.Maybe (fromMaybe)
61+import Data.Maybe (fromMaybe, isNothing)
6262import Data.Foldable (foldrM)
6363import Network.URI (parseURI, isURI, URI(..))
6464import qualified Data.ByteString.Lazy as B
@@ -142,12 +142,18 @@ externalFilter f args' d = do
142142 ".php" -> ("php", f:args')
143143 _ -> (f, args')
144144 else err 85 $ "Filter " ++ f ++ " not found"
145+ when (f' /= f) $ do
146+ mbExe <- findExecutable f'
147+ when (isNothing mbExe) $
148+ err 83 $ "Error running filter " ++ f ++ "\n" ++
149+ show f' ++ " not found in path."
145150 (exitcode, outbs, errbs) <- E.handle filterException $
146151 pipeProcess Nothing f' args'' $ encode d
147152 when (not $ B.null errbs) $ B.hPutStr stderr errbs
148153 case exitcode of
149154 ExitSuccess -> return $ either error id $ eitherDecode' outbs
150− ExitFailure _ -> err 83 $ "Error running filter " ++ f
155+ ExitFailure ec -> err 83 $ "Error running filter " ++ f ++ "\n" ++
156+ "Filter returned error status " ++ show ec
151157 where filterException :: E.SomeException -> IO a
152158 filterException e = err 83 $ "Error running filter " ++ f ++ "\n" ++
153159 show e