曉查 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
程式碼只是少了一個字元,後果竟如此可怕。
上週,一些使用Chrome OS筆記本的使用者發現,一旦重啟筆記本,就將陷入了無法登入的死迴圈。
圖片
明明輸入的開機密碼是對的,但就是一直提示“無法驗證您的密碼”,進不了系統。更嚴重的情況是筆記本將反覆重啟。
一臺好好的筆記本怎麼突然就“變磚”了呢?
原來都是Chrome OS一次悄悄自動更新惹的禍。
由於ChromeOS是開源的,一位Reddit網友仔細系統更新的程式碼,發現其中的低階錯誤令人哭笑不得。
圖片
少一個“&”惹的禍
這位網友仔細對比兩份程式碼後發現,這個“驚天大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 OS過去一直“小錯不斷”,所以有些使用者已經學得精明瞭:
我已經學會了等更新發布一段時間後再升級。
圖片
真是沒想到,程式碼少一個字元竟有這麼大的破壞力。好在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/