From d30fbc2879f58be7951eeb1cf8f9acfc83f1ebe6 Mon Sep 17 00:00:00 2001
From: Albert Krewinkel <albert@zeitkraut.de>
Date: Wed, 9 May 2018 23:03:09 +0200
Subject: [PATCH] Org reader: fix image filename recognition

Use a function from the *filepath* library to check whether a string is
a valid file name. The custom validity checker that was used before gave
wrong results, e.g. for absolute file paths on
Windows (kawabata/ox-pandoc#52).
---
 src/Text/Pandoc/Readers/Org/Shared.hs | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/Text/Pandoc/Readers/Org/Shared.hs b/src/Text/Pandoc/Readers/Org/Shared.hs
index 07dbeca2a..17fe34738 100644
--- a/src/Text/Pandoc/Readers/Org/Shared.hs
+++ b/src/Text/Pandoc/Readers/Org/Shared.hs
@@ -36,17 +36,18 @@ module Text.Pandoc.Readers.Org.Shared
 
 import Prelude
 import Data.Char (isAlphaNum)
-import Data.List (isPrefixOf, isSuffixOf)
+import Data.List (isPrefixOf)
+import System.FilePath (isValid, takeExtension)
 
 
 -- | Check whether the given string looks like the path to of URL of an image.
 isImageFilename :: String -> Bool
-isImageFilename filename =
-  any (\x -> ('.':x)  `isSuffixOf` filename) imageExtensions &&
-  (any (\x -> (x ++ "://") `isPrefixOf` filename) protocols ||
-   ':' `notElem` filename)
+isImageFilename fp = hasImageExtension && (isValid fp || isKnownProtocolUri)
  where
-   imageExtensions = [ "jpeg" , "jpg" , "png" , "gif" , "svg" ]
+   hasImageExtension = takeExtension fp `elem` imageExtensions
+   isKnownProtocolUri = any (\x -> (x ++ "://") `isPrefixOf` fp) protocols
+
+   imageExtensions = [ ".jpeg", ".jpg", ".png", ".gif", ".svg" ]
    protocols = [ "file", "http", "https" ]
 
 -- | Cleanup and canonicalize a string describing a link.  Return @Nothing@ if