[Webkit-unassigned] [Bug 21114] New: Hang on specific combo of XHTML and CSS

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Sep 25 12:00:05 PDT 2008


https://bugs.webkit.org/show_bug.cgi?id=21114

           Summary: Hang on specific combo of XHTML and CSS
           Product: WebKit
           Version: 528+ (Nightly build)
          Platform: Macintosh Intel
        OS/Version: Mac OS X 10.5
            Status: UNCONFIRMED
          Severity: Normal
          Priority: P2
         Component: Layout and Rendering
        AssignedTo: webkit-unassigned at lists.webkit.org
        ReportedBy: rasmus at spotify.com


A specific combination of a certain XHTML elements and CSS causes WebKit to
hang for a very long time (or even crash). We have drilled down a HTML file
reproducing this bug in WebKit/Safari 3.1.2 (5525.20.1)

What I did:
* Started Safari
* Opened crash.html

What I expected to happen:
* Safari rendering the document.

What actually did happen:
* Safari used up 100% of one cpu core and became unresponsive.

FILES:
crash.html – Opening this file in Safari reproduces the bug
----
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        <head>
                <title>Spotify - Share</title>
                <style type="text/css">
      div.section.beta-tokens div.token-info-text {
        padding-left:1em;
        float:left;
      }
                </style>
        </head>
        <body>
                <div id="logo" onclick="document.location.href='/'">

                        <div class="menu">
                                <a href="/">Home</a><a
href="/download/">Download</a><a href="/account/">My Account</a><a
href="/share" class="active">Share</a><a href="/help/">Help</a><a
href="/legal/">Legal</a>                    </div>
                </div>
                                        <div id="loggedinfo">
                                <small>

                                        Logged in as <!--a
href="/account"-->john.doe<!--/a-->
                                        (<a href="/logout">log out</a>)
                                </small>
                        </div>
                                        <div id="supercontainer">
<script type="text/javascript" charset="utf-8">
        function sanitize_val(s) {
                return s.replace(/"/g, '"').replace(/</g,
'<').replace(/>/g, '>');
        }
        function on_resend_mail(elem, addr, token) {
                /*snip*/
        }
</script>
<div class="section beta-tokens">

        <h1>Your Invitation Tokens</h1>
        <p>
                                        <hr />
                        <h2>People you have invited</h2>
                        <p>
                                <ul>
                                <li class="odd-row"><b>lisbeth</b> was born
from <tt>E3wVt4Xn6uqi4wA7</tt> <small>Initially sent to
<b>john.doe at foo.bar</b></small></li><li class="even-row"><b>robert</b> was born
from <tt>fwn2tc9UpLthgs8p</tt> <small>Initially sent to
<b>john.doe at foo.bar</b></small></li></ul>

                                <br /><br />
                        </p>
                                                <hr />
                        <form class="invite" method="post" action="/share/">
                                <h2>Active invitations</h2>
                                <p>
                                        <ul>
                                        <li class="odd-row"><div class="token
sent">36kYVxXH8RJjEELA</div><div class="token-info-text">Was sent to
<b>john.doe at foo.bar</b><br /><a href="javascript:;"
onclick="on_resend_mail(this, 'john.doe at foo.bar',
'36kYVxXH8RJjEELA')"><small>Send again (or to another
address)...</small></a></div><br clear="all" /></li><li class="even-row"><div
class="token new">aVUFRydaTxAnRUFM</div><div class="token-info-text"><input
type="hidden" name="token[]" value="aVUFRydaTxAnRUFM" />Send
to  <input class="email" type="text" style="color:#888888"
onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">2PVsNUGsMaSCGaRd</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="2PVsNUGsMaSCGaRd" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">iJFGqZ7JnVjxkaBE</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="iJFGqZ7JnVjxkaBE" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">eTMxCN8Yp7akKhLu</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="eTMxCN8Yp7akKhLu" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">cUcbZuinLqZABRsN</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="cUcbZuinLqZABRsN" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">GSs7P9YF8nFyes3i</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="GSs7P9YF8nFyes3i" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">DaP7BxJBX2cdb2Df</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="DaP7BxJBX2cdb2Df" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">6MFfYnqVN4Afbuax</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="6MFfYnqVN4Afbuax" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">WqppMxpy45Qy847n</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="WqppMxpy45Qy847n" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">RUCLYSY2cDdRpZyq</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="RUCLYSY2cDdRpZyq" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">TuDQbzEzEZGHYn2s</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="TuDQbzEzEZGHYn2s" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">eRAkwpBYCtjB2yF6</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="eRAkwpBYCtjB2yF6" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">WHfuzD9mn547RW44</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="WHfuzD9mn547RW44" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">niZxgabtkH9LWCEc</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="niZxgabtkH9LWCEc" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">BGtexjVe8acUYR6L</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="BGtexjVe8acUYR6L" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">e98wJV8dyL9WyLeY</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="e98wJV8dyL9WyLeY" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">jQnEqbcy8huHNn44</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="jQnEqbcy8huHNn44" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">FZ6NiN8jCaznVmCh</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="FZ6NiN8jCaznVmCh" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">9JAduGbNbKdk5B6y</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="9JAduGbNbKdk5B6y" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">Yw8dEwY5bDR7R4LL</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="Yw8dEwY5bDR7R4LL" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">7b4dCfqjCBpedsuC</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="7b4dCfqjCBpedsuC" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">KCZTnjkCwjhDZf72</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="KCZTnjkCwjhDZf72" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">CN5pcxyYskebJK7Z</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="CN5pcxyYskebJK7Z" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="odd-row"><div class="token new">Qb7PUsBYN8XDG5Eg</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="Qb7PUsBYN8XDG5Eg" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li><li
class="even-row"><div class="token new">BAggUDgbtHmhnT2A</div><div
class="token-info-text"><input type="hidden" name="token[]"
value="BAggUDgbtHmhnT2A" />Send to  <input class="email" type="text"
style="color:#888888" onfocus="if(this.value=='friends e-mail
address'){this.value='';this.style.color='#000000';}" name="email[]"
value="friends e-mail address" /></div><div style="clear:both" /></li></ul>

                                        <br />
                                        <div id="send-tip-ctrl"
style="display:block">
                                                <div class="button">
                                                        <input type="submit"
name="send" value="Send Invitations" />
                                                </div>
                                                <div class="text">
                                                        Tip: You can add your
friends name to the invitation by writing the 
                                                        e-mail address like
this:  <tt>John Doe john.doe at foo.bar</tt>
                                                </div>

                                                <br clear="all" />
                                        </div>
                                </p>
                        </form>
                                                <br /><br />
                        <hr />
                                <form method="post" action="/share/">
                        <h2>Unused invitations</h2>

                        <p>
                                                                        <span
style="color:#999">You have no more invitations I'm afraid.</span>
                                                        </p>
                </form>
        </p>
</div>
                </div>
                                <div class="bottom-copyright">
                        Copyright © 2007 Spotify Technology SARL | <a
href="/legal/beta-agreement">Beta Agreement</a>

                                        </div>
                        </body>
</html>
----

Crash dump of Safari:
----
This file is 8.2 MB large and when I tried pasting it here (using Safari) the
browser crashed. (such irony!) So I'm providing the crash dump on this URL:
https://apple.spotify.net/tmp/Safari_crash.txt


-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the webkit-unassigned mailing list