<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. */
            layoutTestController.display();
            layoutTestController.notifyDone();
        }

        function test()
        {
            if (window.layoutTestController) {
                layoutTestController.waitUntilDone();
                setTimeout(finish, 0);
            }
        }
    </script>
</head>
<body onload="test();">
    <p>
        Test for <i><a href="http://bugzilla.opendarwin.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>
