summaryrefslogtreecommitdiff
path: root/src/server/PGFService.hs
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2010-07-31 10:45:59 +0000
committerkrasimir <krasimir@chalmers.se>2010-07-31 10:45:59 +0000
commitc8acc8fe116b2e967896f7e31586b83bc826de0e (patch)
treeccfa8cc3c0ab27e2a65e12f766873b3cc1129668 /src/server/PGFService.hs
parentf2619d010d8ca3f25ec2130f48e72c504913b1a2 (diff)
fix: PGFService should type-check the trees that comes from the user
Diffstat (limited to 'src/server/PGFService.hs')
-rw-r--r--src/server/PGFService.hs14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/server/PGFService.hs b/src/server/PGFService.hs
index 35919d4ab..c65ba2993 100644
--- a/src/server/PGFService.hs
+++ b/src/server/PGFService.hs
@@ -8,6 +8,7 @@ import URLEncoding
import Network.FastCGI
import Text.JSON
+import Text.PrettyPrint (render, text, (<+>))
import qualified Codec.Binary.UTF8.String as UTF8 (encodeString, decodeString)
import qualified Data.ByteString.Lazy as BS
@@ -65,9 +66,16 @@ pgfMain pgf command =
getText = liftM (maybe "" (urlDecodeUnicode . UTF8.decodeString)) $ getInput "input"
getTree :: CGI PGF.Tree
- getTree = do mt <- getInput "tree"
- t <- maybe (throwCGIError 400 "No tree given" ["No tree given"]) return mt
- maybe (throwCGIError 400 "Bad tree" ["Bad tree: " ++ t]) return (PGF.readExpr t)
+ getTree = do ms <- getInput "tree"
+ s <- maybe (throwCGIError 400 "No tree given" ["No tree given"]) return ms
+ t <- maybe (throwCGIError 400 "Bad tree" ["tree: " ++ s]) return (PGF.readExpr s)
+ t <- either (\err -> throwCGIError 400 "Type incorrect tree"
+ ["tree: " ++ PGF.showExpr [] t
+ ,render (text "error:" <+> PGF.ppTcError err)
+ ])
+ (return . fst)
+ (PGF.inferExpr pgf t)
+ return t
getCat :: CGI (Maybe PGF.Type)
getCat =