diff options
author | John MacFarlane <jgm@berkeley.edu> | 2021-01-10 12:49:53 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2021-01-10 12:49:53 -0800 |
commit | e741c7f5533d60971e98c6ced477d998335ef0b5 (patch) | |
tree | 9ad798cf3ee865e5308a8f56568ca5bad78b888c /src/Text/Pandoc | |
parent | d98ec4feb80ae0a9bf192c9b14aaef033ba7fd6e (diff) | |
download | pandoc-e741c7f5533d60971e98c6ced477d998335ef0b5.tar.gz |
Fix infinite HTTP requests when writing epubs from URL source.
Due to a bug in code added to avoid overwriting the cover image
if it had the form `fileX.YYY`, pandoc made an endless sequence
of HTTP requests when writing epub with input from a URL.
Closes #7013.
Diffstat (limited to 'src/Text/Pandoc')
-rw-r--r-- | src/Text/Pandoc/Writers/EPUB.hs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Writers/EPUB.hs b/src/Text/Pandoc/Writers/EPUB.hs index 3e3fd8fd6..783f190f5 100644 --- a/src/Text/Pandoc/Writers/EPUB.hs +++ b/src/Text/Pandoc/Writers/EPUB.hs @@ -465,7 +465,12 @@ pandocToEPUB version opts doc = do case epubCoverImage metadata of Nothing -> return ([],[]) Just img -> do - let coverImage = takeFileName img + let fp = takeFileName img + mediaPaths <- gets (map (fst . snd) . stMediaPaths) + coverImageName <- -- see #4206 + if ("media/" <> fp) `elem` mediaPaths + then getMediaNextNewName (takeExtension fp) + else return fp imgContent <- lift $ P.readFileLazy img (coverImageWidth, coverImageHeight) <- case imageSize opts' (B.toStrict imgContent) of @@ -478,7 +483,7 @@ pandocToEPUB version opts doc = do ("coverpage", toVal' "true"), ("pagetitle", toVal $ escapeStringForXML $ TS.pack plainTitle), - ("cover-image", toVal' coverImage), + ("cover-image", toVal' coverImageName), ("cover-image-width", toVal' $ show coverImageWidth), ("cover-image-height", toVal' $ @@ -486,7 +491,7 @@ pandocToEPUB version opts doc = do cssvars True <> vars } (Pandoc meta []) coverEntry <- mkEntry "text/cover.xhtml" cpContent - coverImageEntry <- mkEntry ("media/" ++ coverImage) + coverImageEntry <- mkEntry ("media/" ++ coverImageName) imgContent return ( [ coverEntry ] , [ coverImageEntry ] ) @@ -1076,8 +1081,7 @@ getMediaNextNewName :: PandocMonad m => String -> E m String getMediaNextNewName ext = do nextId <- gets stMediaNextId modify $ \st -> st { stMediaNextId = nextId + 1 } - let nextName = "file" ++ show nextId ++ ext - (P.fetchItem (TS.pack nextName) >> getMediaNextNewName ext) `catchError` const (return nextName) + return $ "file" ++ show nextId ++ ext isHtmlFormat :: Format -> Bool isHtmlFormat (Format "html") = True |