<html>
  <head>
    <style>
      #el0 { position: relative; }
      #el2 { outline-style: dashed; }
    </style>
    <script>
        if (window.testRunner) {
            testRunner.displayAndTrackRepaints();
            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>