From c644578d8b83dda5e3129579f2e24fb0b5ed99b1 Mon Sep 17 00:00:00 2001 From: Ilya Rezvov Date: Tue, 10 Apr 2018 21:25:54 -0700 Subject: [PATCH] fix memory growing behavior --- src/Language/Wasm/Interpreter.hs | 6 +++--- tests/Test.hs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Language/Wasm/Interpreter.hs b/src/Language/Wasm/Interpreter.hs index 12ade8d..ca65b1d 100644 --- a/src/Language/Wasm/Interpreter.hs +++ b/src/Language/Wasm/Interpreter.hs @@ -794,12 +794,12 @@ eval store FunctionInstance { funcType, moduleInstance, code = Function { localT step ctx@EvalCtx{ stack = (VI32 n:rest) } GrowMemory = do let ref = memInstances store ! (memaddrs moduleInstance ! 0) MemoryInstance { memory, maxLen } <- readIORef ref - let size = fromIntegral $ IOVector.length memory `div` pageSize + let size = fromIntegral $ IOVector.length memory `quot` pageSize let growTo = size + fromIntegral n result <- ( - if fromMaybe True ((growTo <=) <$> maxLen) + if fromMaybe True ((growTo <=) <$> maxLen) && growTo <= 0xFFFF then do - mem' <- IOVector.grow memory $ growTo * pageSize + mem' <- IOVector.grow memory $ fromIntegral n * pageSize writeIORef ref $ MemoryInstance mem' maxLen return size else return $ -1 diff --git a/tests/Test.hs b/tests/Test.hs index f98a53e..febd4af 100644 --- a/tests/Test.hs +++ b/tests/Test.hs @@ -34,7 +34,7 @@ compile file = do main :: IO () main = do files <- Directory.listDirectory "tests/samples" - -- let files = ["memory.wast"] + -- let files = ["resizing.wast"] scriptTestCases <- (`mapM` files) $ \file -> do content <- LBS.readFile $ "tests/samples/" ++ file let Right script = Parser.parseScript <$> Lexer.scanner content