谷歌程序員少輸一個(gè)“&”,差點(diǎn)讓全球Chrome筆記本變磚
本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。
代碼只是少了一個(gè)字符,后果竟如此可怕。
上周,一些使用Chrome OS筆記本的用戶發(fā)現(xiàn),一旦重啟筆記本,就將陷入了無(wú)法登錄的死循環(huán)。
明明輸入的開(kāi)機(jī)密碼是對(duì)的,但就是一直提示“無(wú)法驗(yàn)證您的密碼”,進(jìn)不了系統(tǒng)。更嚴(yán)重的情況是筆記本將反復(fù)重啟。
一臺(tái)好好的筆記本怎么突然就“變磚”了呢?
原來(lái)都是Chrome OS一次悄悄自動(dòng)更新惹的禍。
由于ChromeOS是開(kāi)源的,一位Reddit網(wǎng)友仔細(xì)系統(tǒng)更新的代碼,發(fā)現(xiàn)其中的低級(jí)錯(cuò)誤令人哭笑不得。

少一個(gè)“&”惹的禍
這位網(wǎng)友仔細(xì)對(duì)比兩份代碼后發(fā)現(xiàn),這個(gè)“驚天大bug”背后竟然只是谷歌程序員少輸了一個(gè)字符“&”。
原本正確的代碼應(yīng)該是:
- if (keydata.hasvalue() && !key_data->label().empty())
而這位程序員卻這句if語(yǔ)句寫成了。
- if (keydata.hasvalue() & !key_data->label().empty())
“&&”和“&”兩個(gè)運(yùn)算符雖然看起來(lái)只差一點(diǎn)點(diǎn),但二者作用真是天壤之別。
前者是對(duì)兩個(gè)變量求“與”(AND),而后者是對(duì)這兩個(gè)值按位求與。
這樣就導(dǎo)致了條件語(yǔ)句兩邊變量每一位都會(huì)被求與,即使has_value()為真,返回結(jié)果也不一定就是真。
而這串代碼是Chrome OS中保存用戶加密密鑰的部分,由于這個(gè)錯(cuò)誤,系統(tǒng)無(wú)法驗(yàn)證將存儲(chǔ)的密鑰與輸入密碼進(jìn)行比較,就出現(xiàn)了尷尬的一幕。
接到用戶的反饋后,谷歌迅速發(fā)布了91.0.4472.167更新來(lái)解決該問(wèn)題。
如果你的Chrome筆記本只是無(wú)法進(jìn)入當(dāng)前賬戶,那么可以先嘗試安裝最新更新,而不會(huì)丟失文件。
如果你的筆記本無(wú)線重啟,就只能回復(fù)出廠設(shè)置然后再接收更新了,數(shù)據(jù)也會(huì)全部丟失。
沒(méi)測(cè)試就發(fā)布,著實(shí)離譜
堂堂互聯(lián)網(wǎng)大廠竟犯如此低級(jí)錯(cuò)誤,這令不少Chromebook用戶感到憤怒:
谷歌的測(cè)試團(tuán)隊(duì)這兩個(gè)月是休假了嗎?

谷歌沒(méi)有代碼測(cè)試的嗎?為什么會(huì)在沒(méi)有測(cè)試的情況下把代碼發(fā)布到生產(chǎn)環(huán)境。

Chrome OS過(guò)去一直“小錯(cuò)不斷”,所以有些用戶已經(jīng)學(xué)得精明了:
我已經(jīng)學(xué)會(huì)了等更新發(fā)布一段時(shí)間后再升級(jí)。

真是沒(méi)想到,代碼少一個(gè)字符竟有這么大的破壞力。好在Chrome OS系統(tǒng)更新是分批進(jìn)行,波及面也不算太廣。
看到這個(gè)谷歌程序員的bug,你有沒(méi)有想起自己犯過(guò)哪些低級(jí)錯(cuò)誤呢?(比如把等于號(hào)“==”寫成了賦值號(hào)“=”)