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