#7342: Bug in System.Posix.Env.putEnv
-----------------------------------------+----------------------------------
 Reporter:  SimonHengel                  |          Owner:                
     Type:  bug                          |         Status:  new           
 Priority:  normal                       |      Component:  libraries/unix
  Version:  7.4.2                        |       Keywords:                
       Os:  Linux                        |   Architecture:  x86_64 (amd64)
  Failure:  Incorrect result at runtime  |       Testcase:                
Blockedby:                               |       Blocking:                
  Related:                               |  
-----------------------------------------+----------------------------------
 {{{putEnv}}} frees the marshaled string after calling {{{c_putenv}}}.
 This leads to unpredictable behavior, as the string becomes part of the
 environment and should not be freed.

 See [http://pubs.opengroup.org/onlinepubs/007908799/xsh/putenv.html
 SUSv2]:

 > ... the string pointed to by string shall become part of the
 > environment ...

 The issue is reproducible with the following QC property:

 {{{
 import           Test.QuickCheck
 import           Test.QuickCheck.Property
 import           System.Posix.Env
 import           Data.IORef
 import qualified Data.Map as Map
 import           Control.Applicative

 isValidKey :: String -> Bool
 isValidKey   k = '\NUL' `notElem` k && '=' `notElem` k && (not . null) k

 isValidValue :: String -> Bool
 isValidValue v = '\NUL' `notElem` v && (not . null) v

 main :: IO ()
 main = do
   env' <- getEnvironment >>= newIORef . Map.fromList
   quickCheck $ \k v -> isValidKey k ==> isValidValue v ==>
 morallyDubiousIOProperty $ do
     putEnv (k ++ "=" ++ v)
     modifyIORef env' (Map.insert k v)
     (==) <$> readIORef env' <*> (Map.fromList <$> getEnvironment)
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7342>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to