[Webkit-unassigned] [Bug 35992] New: Crash at MediaPlayer::duration()
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Wed Mar 10 15:30:35 PST 2010
https://bugs.webkit.org/show_bug.cgi?id=35992
Summary: Crash at MediaPlayer::duration()
Product: WebKit
Version: 528+ (Nightly build)
Platform: PC
URL: http://stewdio.org/pong/
OS/Version: Windows Vista
Status: NEW
Severity: Normal
Priority: P2
Component: HTML DOM
AssignedTo: webkit-unassigned at lists.webkit.org
ReportedBy: hclam at google.com
To reproduce the crash, use Chrome 5.0.342.2 dev.
1. Open http://stewdio.org/pong/
2. Click Play
3. While there is still sound playing, close the tab
4. Aw snap tab
The following stack trace is shown:
Call stack:
0x64db296d [chrome.dll - htmlmediaelement.cpp:1042]
WebCore::HTMLMediaElement::duration()
0x64db3527 [chrome.dll - htmlmediaelement.cpp:1581]
WebCore::HTMLMediaElement::endedPlayback()
0x64db2a54 [chrome.dll - htmlmediaelement.cpp:1137]
WebCore::HTMLMediaElement::playInternal()
0x64db2a29 [chrome.dll - htmlmediaelement.cpp:1128]
WebCore::HTMLMediaElement::play(bool)
0x64f7cc52 [chrome.dll - v8htmlmediaelement.cpp:322]
WebCore::HTMLMediaElementInternal::playCallback
0x65322206 [chrome.dll - builtins.cc:451]
v8::internal::HandleApiCallHelper<0>
0x653224de [chrome.dll - builtins.cc:468]
v8::internal::Builtin_HandleApiCall
The cause of failure is that:
1. Tab is closed
2. HTMLMediaElement::DocumentWillBecomeInactive() is called
3. HTMLMediaElement::m_player is clearer (set to NULL)
4. ... sometime later ...
5. A timer javascript is executed by window.setInterval()
6. The script calls audio.play() which goes into HTMLMediaElement::play()
7. null pointer exception in HTMLMediaElement::duration() when trying to call
to it
The starts to happen from Chrome revision 37051 which seems to be caused by
Changeset 53780 http://trac.webkit.org/changeset/53780.
The problem is that in HTMLMediaElement::ended(), the code is changed from:
if (!m_player || m_readyState < HAVE_METADATA)
return false;
To
float dur = duration();
if (!m_player || isnan(dur))
return false;
It happens that inside duration(), m_player is used without being checked.
This crash only happens after m_player is cleared by a document close and the
javascript is still active, which doesn't seem to happen in WebKit but only in
Chrome.
--
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the webkit-unassigned
mailing list