diff options
| author | John MacFarlane <[email protected]> | 2023-11-17 10:11:09 -0800 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2023-11-17 10:13:22 -0800 |
| commit | 1880d75e7cb5a43436703d2b75992efd71df2f66 (patch) | |
| tree | ae27bc1ddee6e285929c96ac4aa92f37ad95ece4 /src | |
| parent | 3591733e19f3a8db200c6170e6e543eb97e91728 (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).
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Class/IO.hs | 8 |
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 |
