<html>
  <head>
    <style>
      #el0 { position: relative; }
      #el2 { outline-style: dashed; }
    </style>
    <script>
        if (window.testRunner) {
            testRunner.display();
            testRunner.waitUntilDone();
        }

        function log(message) {
        var console = document.getElementById("console");
        console.appendChild(document.createTextNode(message + "\n"));
        }

        function test() {
           document.execCommand('removeformat');
           setTimeout("finish()", 100);
        }
        function finish() {
            if (window.testRunner) {
                testRunner.dumpAsText();
                log("PASSED: Didn't crash!\n");
                testRunner.notifyDone();
            }
        }

//         This tests a crash caused by stale pointers to continuations in a block's continuations table.
//         https://bugs.webkit.org/show_bug.cgi?id=81276

        function runTest() {
            el0=document.createElement('span')
            el0.setAttribute('id','el0')
            document.body.appendChild(el0)
            el1=document.createElement('div')
            el0.appendChild(el1)
            el1.appendChild(document.createElement('input'))
            el0.appendChild(document.createTextNode('A'))
            el2=document.createElement('q')
            el2.setAttribute('id','el2')
            document.body.appendChild(el2)
            el2.appendChild(document.createElement('div'))
            el2.appendChild(document.createElement('input'))
            document.designMode='on'
            document.execCommand('selectall')
            document.execCommand('FormatBlock', false, '<'+'pre>')
            document.execCommand('Undo')
            setTimeout("test();",10)
         }
    </script>
  </head>
  <body onload="runTest();">
  <div id="console"></div>
  </body>
</html>