Improve error message for invalid package db file (#6133).
authorPaolo Capriotti <p.capriotti@gmail.com>
Mon, 4 Jun 2012 10:59:25 +0000 (11:59 +0100)
committerPaolo Capriotti <p.capriotti@gmail.com>
Mon, 4 Jun 2012 15:26:07 +0000 (16:26 +0100)
Use `reads` instead of `read` to parse package configuration files, and
report a meaningful error when the parsing fails.

compiler/main/Packages.lhs

index cdda961..42e5cf5 100644 (file)
@@ -59,6 +59,7 @@ import System.Directory
 import System.FilePath as FilePath
 import qualified System.FilePath.Posix as FilePath.Posix
 import Control.Monad
+import Data.Char (isSpace)
 import Data.List as List
 import Data.Map (Map)
 import qualified Data.Map as Map
@@ -234,7 +235,11 @@ readPackageConfig dflags conf_file = do
                 "can't find a package database at " ++ conf_file
             debugTraceMsg dflags 2 (text "Using package config file:" <+> text conf_file)
             str <- readFile conf_file
-            return (map installedPackageInfoToPackageConfig $ read str)
+            case reads str of
+                [(configs, rest)]
+                    | all isSpace rest -> return (map installedPackageInfoToPackageConfig configs)
+                _ -> ghcError $ InstallationError $
+                        "invalid package database file " ++ conf_file
 
   let
       top_dir = topDir dflags