谷歌程式設計師少輸一個“&”,差點讓全球Chrome筆記本變磚

曉查 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

程式碼只是少了一個字元,後果竟如此可怕。

上週,一些使用Chrome OS筆記本的使用者發現,一旦重啟筆記本,就將陷入了無法登入的死迴圈。

谷歌程式設計師少輸一個“&”,差點讓全球Chrome筆記本變磚

圖片

明明輸入的開機密碼是對的,但就是一直提示“無法驗證您的密碼”,進不了系統。更嚴重的情況是筆記本將反覆重啟。

一臺好好的筆記本怎麼突然就“變磚”了呢?

原來都是Chrome OS一次悄悄自動更新惹的禍。

由於ChromeOS是開源的,一位Reddit網友仔細系統更新的程式碼,發現其中的低階錯誤令人哭笑不得。

谷歌程式設計師少輸一個“&”,差點讓全球Chrome筆記本變磚

圖片

少一個“&”惹的禍

這位網友仔細對比兩份程式碼後發現,這個“驚天大bug”背後竟然只是谷歌程式設計師少輸了一個字元“&”。

原本正確的程式碼應該是:

if (keydata。hasvalue() && !key_data->label()。empty())

而這位程式設計師卻這句if語句寫成了

if (keydata。hasvalue() & !key_data->label()。empty())

“&&”和“&”兩個運算子雖然看起來只差一點點,但二者作用真是天壤之別。

前者是對兩個變數

求“與”

(AND),而後者是對這兩個值

按位求與

這樣就導致了條件語句兩邊變數每一位都會被求與,即使has_value()為真,返回結果也不一定就是真。

而這串程式碼是Chrome OS中儲存使用者加密金鑰的部分,由於這個錯誤,系統無法驗證將儲存的金鑰與輸入密碼進行比較,就出現了尷尬的一幕。

接到使用者的反饋後,谷歌迅速釋出了91。0。4472。167更新來解決該問題。

如果你的Chrome筆記本只是無法進入當前賬戶,那麼可以先嚐試安裝最新更新,而不會丟失檔案。

如果你的筆記本無線重啟,就只能回覆出廠設定然後再接收更新了,資料也會全部丟失。

沒測試就釋出,著實離譜

堂堂網際網路大廠竟犯如此低階錯誤,這令不少Chromebook使用者感到憤怒:

谷歌的測試團隊這兩個月是休假了嗎?

谷歌程式設計師少輸一個“&”,差點讓全球Chrome筆記本變磚

圖片

谷歌沒有程式碼測試的嗎?為什麼會在沒有測試的情況下把程式碼釋出到生產環境。

谷歌程式設計師少輸一個“&”,差點讓全球Chrome筆記本變磚

圖片

Chrome OS過去一直“小錯不斷”,所以有些使用者已經學得精明瞭:

我已經學會了等更新發布一段時間後再升級。

谷歌程式設計師少輸一個“&”,差點讓全球Chrome筆記本變磚

圖片

真是沒想到,程式碼少一個字元竟有這麼大的破壞力。好在Chrome OS系統更新是分批進行,波及面也不算太廣。

看到這個谷歌程式設計師的bug,你有沒有想起自己犯過哪些低階錯誤呢?(比如把等於號“==”寫成了賦值號“=”)

參考連結:

[1]https://9to5google。com/2021/07/21/psa-chrome-os-update-locking-out-accounts/

[2]https://arstechnica。com/gadgets/2021/07/google-pushed-a-one-character-typo-to-production-bricking-chrome-os-devices/?comments=1

[3]https://www。reddit。com/r/chromeos/comments/onlcus/update_it_seems_google_has_pulled_the_165_stable/h5vev76/