Mercurial > urweb
annotate demo/nested.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 | d4a81273d4b1 |
children |
rev | line source |
---|---|
adamc@455 | 1 fun pageA () = return <xml> |
adamc@455 | 2 <head> |
adamc@455 | 3 <title>A</title> |
adamc@455 | 4 </head> |
adamc@455 | 5 <body> |
adamc@455 | 6 <form> |
adamc@455 | 7 <table> |
adamc@455 | 8 <tr> |
adamc@455 | 9 <td>Forename:</td> |
adamc@455 | 10 <td><textbox{#Forename}/></td> |
adamc@455 | 11 </tr> |
adamc@455 | 12 <tr> |
adamc@455 | 13 <td>Enter a Surname?</td> |
adamc@455 | 14 <td><checkbox{#EnterSurname}/></td> |
adamc@455 | 15 </tr> |
adamc@455 | 16 </table> |
adamc@455 | 17 <submit action={fromA} /> |
adamc@455 | 18 </form> |
adamc@455 | 19 </body> |
adamc@455 | 20 </xml> |
adamc@455 | 21 |
adamc@455 | 22 and fromA r = |
adamc@455 | 23 let |
adamc@455 | 24 val forename = r.Forename |
adamc@455 | 25 |
adamc@455 | 26 fun pageB () = return <xml> |
adamc@455 | 27 <head> |
adamc@455 | 28 <title>B</title> |
adamc@455 | 29 </head> |
adamc@455 | 30 <body> |
adamc@455 | 31 <form> |
adamc@455 | 32 Surname: |
adamc@455 | 33 <textbox{#Surname}/> |
adamc@455 | 34 <submit action={pageC'} /> |
adamc@455 | 35 </form> |
adamc@455 | 36 <a link={pageA ()}>Previous</a> |
adamc@455 | 37 </body> |
adamc@455 | 38 </xml> |
adamc@455 | 39 |
adamc@455 | 40 and pageC' r = pageC (Some r.Surname) |
adamc@455 | 41 |
adamc@455 | 42 and pageC surname = return <xml> |
adamc@455 | 43 <head> |
adamc@455 | 44 <title>C</title> |
adamc@455 | 45 </head> |
adamc@455 | 46 <body> |
adamc@455 | 47 <p>Hello {[forename]}{case surname of |
adamc@455 | 48 None => <xml/> |
adamc@455 | 49 | Some s => <xml> {[s]}</xml>}</p> |
adamc@455 | 50 {case surname of |
adamc@455 | 51 None => <xml><a link={pageA ()}>Previous</a></xml> |
adamc@455 | 52 | Some _ => <xml><a link={pageB ()}>Previous</a></xml>} |
adamc@455 | 53 </body> |
adamc@455 | 54 </xml> |
adamc@455 | 55 in |
adamc@455 | 56 if r.EnterSurname then |
adamc@455 | 57 pageB () |
adamc@455 | 58 else |
adamc@455 | 59 pageC None |
adamc@455 | 60 end |
adamc@455 | 61 |
adamc@455 | 62 val main = pageA |