diff --git a/src/Text/Pandoc/Class/IO.hs b/src/Text/Pandoc/Class/IO.hs index 5d4dbc715..816d71048 100644 --- a/src/Text/Pandoc/Class/IO.hs +++ b/src/Text/Pandoc/Class/IO.hs @@ -53,6 +53,7 @@ import Network.URI (unEscapeString) import System.Directory (createDirectoryIfMissing) import System.Environment (getEnv) import System.FilePath ((</>), takeDirectory, normalise) +import qualified System.FilePath.Posix as Posix import System.IO (stderr) import System.IO.Error import System.Random (StdGen) @@ -234,6 +235,6 @@ adjustImagePath dir mediabag (Image attr lab (src, tit)) = case lookupMedia (T.unpack src) mediabag of Nothing -> Image attr lab (src, tit) Just item -> - let fullpath = dir <> "/" <> mediaPath item + let fullpath = dir Posix.</> mediaPath item in Image attr lab (T.pack fullpath, tit) adjustImagePath _ _ x = x diff --git a/src/Text/Pandoc/MediaBag.hs b/src/Text/Pandoc/MediaBag.hs index df71ff813..e10124664 100644 --- a/src/Text/Pandoc/MediaBag.hs +++ b/src/Text/Pandoc/MediaBag.hs @@ -29,6 +29,8 @@ import qualified Data.Map as M import Data.Maybe (fromMaybe, isNothing) import Data.Typeable (Typeable) import System.FilePath +import qualified System.FilePath.Posix as Posix +import qualified System.FilePath.Windows as Windows import Text.Pandoc.MIME (MimeType, getMimeTypeDef, extensionFromMimeType) import Data.Text (Text) import qualified Data.Text as T @@ -78,7 +80,8 @@ insertMedia fp mbMime contents (MediaBag mediamap) = , mediaMimeType = mt } fp' = canonicalize fp uri = parseURI fp - newpath = if isRelative fp + newpath = if Posix.isRelative fp + && Windows.isRelative fp && isNothing uri && ".." `notElem` splitDirectories fp then T.unpack fp'