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