Skip to content

Commit

Permalink
Fix TOCTOU
Browse files Browse the repository at this point in the history
  • Loading branch information
jgotoh committed Sep 13, 2024
1 parent 57a8151 commit 0560c3f
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions cabal-install/src/Distribution/Client/ProjectConfig.hs
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ import qualified Codec.Archive.Tar.Entry as Tar
import qualified Distribution.Client.GZipUtils as GZipUtils
import qualified Distribution.Client.Tar as Tar

import Control.Exception (handle)
import Control.Exception (handle, tryJust)
import Control.Monad.Trans (liftIO)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as LBS
Expand Down Expand Up @@ -239,6 +239,9 @@ import System.IO
( IOMode (ReadMode)
, withBinaryFile
)
import System.IO.Error
( isDoesNotExistError
)

import Distribution.Solver.Types.ProjectConfigPath

Expand Down Expand Up @@ -839,12 +842,10 @@ readAndParseFile
-> FilePath
-> IO a
readAndParseFile parser verbosity fpath = do
exists <- doesFileExist fpath
unless exists $
dieWithException verbosity $
ErrorParsingFileDoesntExist fpath
bs <- BS.readFile fpath
parseString parser verbosity fpath bs
result <- tryJust (guard . isDoesNotExistError) (BS.readFile fpath)
case result of
Right bs -> parseString parser verbosity fpath bs
Left _ -> dieWithException verbosity $ ErrorParsingFileDoesntExist fpath

parseString
:: ( BS.ByteString
Expand Down

0 comments on commit 0560c3f

Please sign in to comment.