@@ -21,7 +21,7 @@ import Distribution.Server.Users.Types (UserId(..))
2121import Distribution.Server.Framework.BlobStorage (BlobId , BlobId_v0 , BlobStorage )
2222import Distribution.Server.Framework.Instances (PackageIdentifier_v0 )
2323import Distribution.Server.Framework.MemSize
24- import Distribution.Server.Util.Parse (unpackUTF8 )
24+ import Distribution.Server.Util.Parse (unpackUTF8Strict )
2525import Distribution.Server.Features.Security.Orphans ()
2626import Distribution.Server.Features.Security.MD5
2727import Distribution.Server.Features.Security.SHA256
@@ -35,6 +35,7 @@ import Distribution.PackageDescription.Parsec
3535 ( parseGenericPackageDescription , runParseResult )
3636
3737import Data.Serialize (Serialize )
38+ import Data.ByteString (StrictByteString )
3839import Data.ByteString.Lazy (LazyByteString )
3940import Data.Time.Clock (UTCTime (.. ))
4041import Data.Time.Calendar (Day (.. ))
@@ -47,7 +48,9 @@ import qualified Data.Vector as Vec
4748 Datatypes
4849-------------------------------------------------------------------------------}
4950
50- newtype CabalFileText = CabalFileText { cabalFileByteString :: LazyByteString }
51+ -- | Cabal files are definitely small enough to use a strict ByteString.
52+ -- This eliminates one possible source of issues with lazy IO.
53+ newtype CabalFileText = CabalFileText { cabalFileByteString :: StrictByteString }
5154 deriving (Eq , MemSize )
5255
5356-- | The information we keep about a particular version of a package.
@@ -156,7 +159,7 @@ instance Package PkgInfo where
156159-------------------------------------------------------------------------------}
157160
158161cabalFileString :: CabalFileText -> String
159- cabalFileString = unpackUTF8 . cabalFileByteString
162+ cabalFileString = unpackUTF8Strict . cabalFileByteString
160163
161164pkgOriginalRevision :: PkgInfo -> (CabalFileText , UploadInfo )
162165pkgOriginalRevision = Vec. head . pkgMetadataRevisions
@@ -208,7 +211,7 @@ pkgLatestTarball pkginfo =
208211pkgDesc :: PkgInfo -> GenericPackageDescription
209212pkgDesc pkgInfo =
210213 case runParseResult $ parseGenericPackageDescription $
211- BS.L. toStrict $ cabalFileByteString $ fst $
214+ cabalFileByteString $ fst $
212215 pkgLatestRevision pkgInfo of
213216 -- We only make PkgInfos with parsable pkgDatas, so if it
214217 -- doesn't parse then something has gone wrong.
@@ -219,7 +222,7 @@ pkgDesc pkgInfo =
219222pkgDescMaybe :: PkgInfo -> Maybe GenericPackageDescription
220223pkgDescMaybe pkgInfo =
221224 case runParseResult $ parseGenericPackageDescription $
222- BS.L. toStrict $ cabalFileByteString $ fst $
225+ cabalFileByteString $ fst $
223226 pkgLatestRevision pkgInfo of
224227 -- We only make PkgInfos with parsable pkgDatas, so if it
225228 -- doesn't parse then something has gone wrong.
0 commit comments