_ [comp] Fx 1.5.0.1 が落ちるページ

めも - Firefox について より。

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <style type="text/css">h1 + p:first-letter {float:right;}</style>
 <title>test</title>
 </head>
 <body>
 <h1>a</h1>
<a href="b"><img src="b" alt="b"></a>	 </body>
 </html>

という HTML ファイルを開き、リンクにポインタをのせると SEGV る。1.5.dfsg+1.5.0.1-1vd1 で確認。float:right が float:left でもクラッシュ。 バックトレースを取ってみるとこんな感じ。

#0  0xffffe410 in __kernel_vsyscall ()
#1  0x401aea7d in raise () from /lib/tls/i686/cmov/libpthread.so.0
#2  0x0808217c in nsProfileLock::FatalSignalHandler ()
#3  <signal handler called>
#4  0x0827091c in nsCSSFrameConstructor::GetInsertionPoint ()
#5  0x0827fab7 in nsCSSFrameConstructor::ContentInserted ()
#6  0x0827edf9 in nsCSSFrameConstructor::RecreateFramesForContent ()
#7  0x0827f0d2 in nsCSSFrameConstructor::ProcessRestyledFrames ()
#8  0x0827f21c in nsCSSFrameConstructor::RestyleElement ()
#9  0x0827f44f in nsCSSFrameConstructor::ProcessOneRestyle ()
#10 0x0827f552 in nsCSSFrameConstructor::ProcessPendingRestyles ()
#11 0x0827f5fe in nsCSSFrameConstructor::RestyleEvent::HandleEvent ()
#12 0x0827f631 in HandleRestyleEvent ()
#13 0x401259b7 in PL_HandleEvent () from /usr/lib/firefox/libxpcom_core.so
#14 0x40126288 in PL_ProcessPendingEvents ()
   from /usr/lib/firefox/libxpcom_core.so
#15 0x4012793e in nsAutoCMonitor::Exit ()
   from /usr/lib/firefox/libxpcom_core.so
#16 0x08266d95 in event_processor_callback ()

Bugzilla を漁ってみると、

  • Bugzilla ORG 318592 - [FIX]Crash with evil testcase, using float:right; and .u::first-letter { letter-spacing: 50px; }
  • Bugzilla ORG 322820 - Crash [@ nsCSSFrameConstructor::RemoveFirstLetterFrames] with evil testcase, using float:right; and .u::first-letter
  • Bugzilla ORG 317275 - Evil float:right testcase causes assertions and can crash [@ nsFrame::GetFirstLeaf]

あたりを手繰れてきた。示されてるパッチを当ててみる。Bugzilla ORG 318592 の testcase2 (Bugzilla ORG 3228207) と Bugzilla ORG 317275 のテストケース4つでは落ちなくなったけど、上記問題の HTML ファイルと Bugzilla ORG 318592 の testcase ではまだ落ちる。もっとも両者では落ちる場所が違うんだけど、アテが外れたか。 なお、trunk (Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.9a1) Gecko/20060207 Firefox/1.6a1) では、Bugzilla ORG 318592 の testcase 以外、上記問題の HTML ファイルの含めて問題ないようだ。

_ [debian] w3m 0.5.1+1.946-0vd8

w3mでpipeをクローズしないバグの修正を施して作成。