Go語(yǔ)言這次依舊還是小版本更新,包括 Go 1.14.7
和 Go 1.13.15
,主要解決最近報(bào)告的安全問(wèn)題。為什么Go
每次更新都是發(fā)布兩個(gè)版本?這是 Go
的慣例,會(huì)同時(shí)維護(hù)兩個(gè)版本的更新,比如現(xiàn)在是 Go1.14
和 Go1.13
,如果 Go1.15
發(fā)布了,之后就會(huì)變成 Go1.15
和 Go1.14
。
(推薦教程:Go Web 編程)
因?yàn)樯婕暗桨踩珕?wèn)題,建議所有用戶都進(jìn)行相應(yīng)版本更新(如果不確定哪個(gè)版本,請(qǐng)選擇 Go 1.14.7
)。
涉及到的具體問(wèn)題如下:
encoding/binary
:ReadUvarint
和ReadVarint
可以從無(wú)效輸入中讀取無(wú)限數(shù)量的字節(jié)。對(duì)ReadUvarint
或ReadVarint
的某些無(wú)效輸入可能導(dǎo)致這些函數(shù)在返回錯(cuò)誤之前從ByteReader
參數(shù)讀取無(wú)限數(shù)量的字節(jié)。當(dāng)調(diào)用者直接從網(wǎng)絡(luò)讀取數(shù)據(jù)時(shí),這可能導(dǎo)致處理的輸入超出預(yù)期,并且依賴于ReadUvarint
和ReadVarint
甚至僅從無(wú)效輸入中僅消耗少量的有限字節(jié)數(shù)。在更新后,ReadUvarint
和ReadVarint
現(xiàn)在總是在消耗了一定數(shù)量的字節(jié)(特別是MaxVarintLen64
,即 10)之后返回。返回的結(jié)果沒(méi)有改變;這些函數(shù)僅檢測(cè)并返回一些錯(cuò)誤,而無(wú)需讀取過(guò)多的輸入。具體issue
見(jiàn):https://github.com/golang/go/issues/40618。
(推薦微課:Go 基礎(chǔ)微課)
在剛剛發(fā)布的 Go1.15 RC2
版本中,也修復(fù)了該問(wèn)題。關(guān)于 Go1.15
的更多信息可以參見(jiàn)文檔:https://tip.golang.org/doc/go1.15, 已經(jīng)8月份了,Go1.15
正式發(fā)布應(yīng)該不遠(yuǎn)了。