Mercurial > urweb
view tests/channelThief.ur @ 2297:6d56080f495c
Fix a read-after-free bug using a timestamp check
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Thu, 19 Nov 2015 13:18:58 -0500 |
parents | a671e5258a2c |
children |
line wrap: on
line source
table t : { Ch : channel string } fun go () = let fun overwrite () = dml (DELETE FROM t WHERE TRUE); ch <- channel; dml (INSERT INTO t (Ch) VALUES ({[ch]})); return ch fun retrieve () = oneRowE1 (SELECT (t.Ch) FROM t) fun transmit () = ch <- retrieve (); send ch "Test" fun listenOn ch = s <- recv ch; alert s in ch <- overwrite (); return <xml><body onload={listenOn ch}> <button value="overwrite" onclick={fn _ => ch <- rpc (overwrite ()); listenOn ch}/> <button value="retrieve" onclick={fn _ => ch <- rpc (retrieve ()); listenOn ch}/> <button value="transmit" onclick={fn _ => rpc (transmit ())}/> </body></xml> end fun main () = return <xml><body> <form><submit action={go}/></form> </body></xml>