<html>
<head>
    <title></title>
    <script type="text/javascript">
        function finish()
        {
            /* Since the crash happens in painting code, force painting. This
               makes the test work even when run without the --pixel option. */
            testRunner.displayAndTrackRepaints();
            testRunner.notifyDone();
        }

        function test()
        {
            if (window.testRunner) {
                testRunner.waitUntilDone();
                setTimeout(finish, 0);
                testRunner.dumpAsText();
            }
        }
    </script>
</head>
<body onload="test();">
    <p>
        Test for <i><a href="https://bugs.webkit.org/show_bug.cgi?id=9009">http://bugzilla.opendarwin.org/show_bug.cgi?id=9009</a>
        REGRESSION: ToT crash in WebCore at Zap2it</i>.
    </p>
    <p>
        No crash means PASS.
    </p>
    <table style="position: absolute; top: -6px; border-collapse: collapse; border-top: 10px solid; width: 100px; height: 100px;">
    <tbody></tbody>
    <tbody><tr><td></td></tr></tbody>
    </table>
</body>
