aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2023-11-17 10:11:09 -0800
committerJohn MacFarlane <[email protected]>2023-11-17 10:13:22 -0800
commit1880d75e7cb5a43436703d2b75992efd71df2f66 (patch)
treeae27bc1ddee6e285929c96ac4aa92f37ad95ece4
parent3591733e19f3a8db200c6170e6e543eb97e91728 (diff)
T.P.Class.IO.openURL improvements for data uris.
- Only treat as base64 if ';base64' is present. - Otherwise treat as UTF-8 (not 100% reliable but should cover most other cases). - Strip off ';base64' (or ';charset=...' or whatever) from mime type. This last change addresses #9195 (problems with data URIs in conversion to docx).
-rw-r--r--src/Text/Pandoc/Class/IO.hs8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Class/IO.hs b/src/Text/Pandoc/Class/IO.hs
index 2ae3b5cee..760990129 100644
--- a/src/Text/Pandoc/Class/IO.hs
+++ b/src/Text/Pandoc/Class/IO.hs
@@ -124,9 +124,13 @@ openURL :: (PandocMonad m, MonadIO m) => Text -> m (B.ByteString, Maybe MimeType
openURL u
| Just (URI{ uriScheme = "data:",
uriPath = upath }) <- parseURI (T.unpack u) = do
- let (mime, rest) = break (== ',') $ unEscapeString upath
+ let (mimespec, rest) = break (== ',') $ unEscapeString upath
let contents = UTF8.fromString $ drop 1 rest
- return (decodeBase64Lenient contents, Just (T.pack mime))
+ case break (== ';') (filter (/= ' ') mimespec) of
+ (mime, ";base64") ->
+ return (decodeBase64Lenient contents, Just (T.pack mime))
+ (mime, _) ->
+ return (contents, Just (T.pack mime))
| otherwise = do
let toReqHeader (n, v) = (CI.mk (UTF8.fromText n), UTF8.fromText v)
customHeaders <- map toReqHeader <$> getsCommonState stRequestHeaders