23 歲博士生修復 Firefox 中的 22 年 “幽靈老 Bug”
2002 年 6 月 2 日,Firefox 用戶報告了一個 bug:當鼠標懸浮在工具欄圖標上時會展示相關提示(該項特性名為 'Tooltips')。如果此時將瀏覽器從前臺切換到后臺,該提示會仍然留在前臺 —— 就像幽靈一樣。而擺脫這一惱人提示的唯一方法是再次將瀏覽器從后臺切換到前臺,然后將鼠標從工具欄上移開。
該 bug 的具體復現如下圖所示:
22 年后 Mozilla 終于為 Firefox 修復了該 bug,對應的 Bugzilla 報告也終于關閉了。
根據科技媒體 arstechnica 的報道,幫助修復該 bug 的是斯坦福大學的一年級電機工程博士生 Yifan Zhu,這也是他第一次向開源項目貢獻補丁。
▲ https://fanzhuyifan.github.io/
Zhu 出生于 1999 年,也就是該 bug 首次報告三年之前。他是在 Linux 上使用郵件客戶端 Thunderbird 時首次遭遇該 bug,認為這個 bug 太惱人了。他試著報告該 bug,結果發現它已經存在了 22 年之久,至今還沒有修復,可能是因為它是一個小問題也不會導致崩潰處理的優先度不高。
畢竟這個 bug 僅僅影響到非常小區域的 UI,用戶順手就能臨時處理,而且有很多其他比它更嚴重的 bug 在排隊等待解決,所以這個 bug 就這樣變為了 “陳年老 Bug”。
于是他決定自己來修復。他知道如何編程,也正好處于博士生開始前的暑假,但此前從未向開源項目貢獻代碼,也從未在 Firefox 之類的復雜項目上工作過。
雖然沖勁十足,但 Zhu 剛開始的修 bug 之路算不上順利。他先是在整個代碼庫里搜索 'tooltip',然后檢查可能存在錯誤的候選內容,并插入調試打印語句跟蹤執行。這樣的工作非常耗費時間。
不過正是通過這樣的 “笨方法”,Zhu 最后定位到了問題所在。當鼠標懸浮在某個元素上時,一個計時器會啟動去顯示 tooltip,在鼠標移出事件后計時器將會取消。但使用快捷鍵切換窗口或虛擬桌面時,Firefox 沒有取消計時器。Zhu 遞交了補丁,讓 tooltip 的顯示基于 Firefox 失去焦點而不是鼠標離開應用。
幾個小時后,Zhu 收到 Mozilla 資深軟件工程師 Emilio Cobos álvarez 的回復,他幫助完善了 Zhu 的補丁并提交到代碼庫中,并表示 Zhu 的第一個 Firefox 補丁令人印象深刻。