一位 23 歲的程序員如何修復了Firefox一個已有 22 年曆史的漏洞

2002年6月,Ubuntu創始人Mark Shuttleworth首次體驗了太空之旅,與此同時,美國司法部針對微軟的反壟斷案正在進入最終辯論階段,而Adam Price使用當時的Mozilla瀏覽器(運行在Mac上)遇到了一個持久工具提示的問題。

他在6月2日寫道:“如果我將鼠標懸停在工具欄鏈接上並稍作等待,一個帶有鏈接描述的小黃框會出現。如果我現在用command-tab將Mozilla切換到後臺,那個小黃框仍然停留在前臺。要想消除它,唯一的方法就是將Mozilla重新放到前臺,再將鼠標移出工具欄。”在隨後的幾周、幾月、幾年,甚至超過二十年的時間裏,許多其他人確認了這個問題——儘管還有其他與之相關的一些問題,但Price確實提出了一個可重複的問題。

在這些年裏,人們時不時地查看這個問題線程或者將其他問題標記爲此問題的重複內容。這個問題時而看似被解決了,只是爲了後來讓代碼編寫者和評論者發現,在不同版本中問題略有變化,或者先前的修復看起來似乎是無意中進行的。有時問題似乎也出現在Windows或Linux上。一名評論者denis在問題存在21年後指出:“我有點傾向於讓它永遠存在下去。它感覺就像是一個過去的遺蹟。”

然而,這個遺蹟現在已經消失了,因爲在9月初對Bug 148624的修復被推送出去,修復體現在119版本的構建中。我嘗試在我那臺尚未更新至118.0.1版本的Mac上的Firefox瀏覽器中重現這個工具提示,但我無法親自體驗這一傳統過程。這個補丁體積很小,只在工具提示的顯示代碼中增加了一個檢查文檔是否處於焦點的檢查。

修復Firefox的Tooltip Listener的Yifan Zhu表示,他們首次在Linux的Thunderbird中遇到了這個bug,描述爲“我的屏幕上飄浮着看起來隨機的文本段落。”頻繁在虛擬桌面之間切換讓主題行浮動在他們的屏幕上,這“極爲惱人”。Zhu學會了在切換前先切回Firefox或Thunderbird並移動光標。

但這個問題漸漸引起了他們的注意,因此他們開始研究,並試圖提交bug。Zhu寫道:“令我震驚的是,我發現這個bug報告已經存在了超過20年,而且還沒有得到解決。”因爲它“是一個不會引起崩潰的小‘外觀’問題”,所以有很大的可能性沒人會修復它——“除非我自己做。”這個觀點。

雖然Zhu有動力,知道如何編程,但他們“在複雜得像Firefox瀏覽器這樣的項目中沒有任何經驗”,並且“之前從未爲開源項目做過貢獻”。但這是在他們攻讀博士學位的那個夏天。“那麼,爲什麼不嘗試一下呢?”

他們起步並不順利。“我只是在整個代碼庫中搜索‘工具提示’,檢查可能的候選內容,並插入調試打印語句以追蹤執行流程,”Zhu寫道。這最終帶來了答案。“當鼠標懸停在某個元素上時,會啓動一個定時器來顯示工具提示。定時器將在一個鼠標移出事件上被取消,但是當我使用鍵盤快捷鍵切換窗口或虛擬桌面時,Firefox並未接收到它。”

Zhu提交了一個修改,將工具提示的顯示依賴改爲基於Firefox是否失去焦點,而非鼠標是否離開應用程序。在接下來的幾小時裏,他們收到了Emilio Cobos Álvarez的消息,後者優化了Zhu的方案,並幫助將修改合併到代碼庫中。儘管修復帶來了一些新的問題,但這些新問題也在得到處理。

Zhu出生於1999年,僅在這個bug提交的三年後。在他們解決它時,他們剛剛完成了在斯坦福大學的本科和碩士學位學業。現在,他們正開始攻讀電氣工程博士學位。他們只能猜測爲什麼這個問題持續了他們大半生的時間。他們的猜測是,它既是一個外觀上的不便,也很難復現,這使得其他更嚴重的問題始終排在更前面。

Cobos Álvarez,引導Zhu的修復成爲了一個提交,給我們寫道“這個區域相當棘手”,鑑於各種Firefox配置以及它們如何響應不同的操作系統。找到一個優雅地處理Mozilla應用失焦而沒有操作系統輸入的解決方案是棘手的。“對於他的第一個Firefox貢獻來說,相當了不起!”

在社交媒體上,特別是你可能期望在Mastodon實例上找到對Mozilla的XML用戶界面語言有意見的人,都爲此歡呼。有些人表達了他們對Bugzilla(一個追蹤bug的工具)比這個bug自身存在還要久(截至8月份已經有25年)的驚訝。一些人提出,這個修復對抗了“stalebots”(一種標記舊的、未解決問題以便刪除的機器人)的盛行。還有人爲此編排了一整個英雄之旅的故事:

偉大的提交不是任何人都能做出的,但偉大的提交可以來自任何地方。

更多遊戲資訊請關註:電玩幫遊戲資訊專區

電玩幫圖文攻略 www.vgover.com