Go语言这次依旧还是小版本更新,包括 Go 1.14.7
和 Go 1.13.15
,主要解决最近报告的安全问题。为什么Go
每次更新都是发布两个版本?这是 Go
的惯例,会同时维护两个版本的更新,比如现在是 Go1.14
和 Go1.13
,如果 Go1.15
发布了,之后就会变成 Go1.15
和 Go1.14
。
(推荐教程:Go Web 编程)
因为涉及到安全问题,建议所有用户都进行相应版本更新(如果不确定哪个版本,请选择 Go 1.14.7
)。
涉及到的具体问题如下:
encoding/binary
:ReadUvarint
和ReadVarint
可以从无效输入中读取无限数量的字节。对ReadUvarint
或ReadVarint
的某些无效输入可能导致这些函数在返回错误之前从ByteReader
参数读取无限数量的字节。当调用者直接从网络读取数据时,这可能导致处理的输入超出预期,并且依赖于ReadUvarint
和ReadVarint
甚至仅从无效输入中仅消耗少量的有限字节数。在更新后,ReadUvarint
和ReadVarint
现在总是在消耗了一定数量的字节(特别是MaxVarintLen64
,即 10)之后返回。返回的结果没有改变;这些函数仅检测并返回一些错误,而无需读取过多的输入。具体issue
见:https://github.com/golang/go/issues/40618。
(推荐微课:Go 基础微课)
在刚刚发布的 Go1.15 RC2
版本中,也修复了该问题。关于 Go1.15
的更多信息可以参见文档:https://tip.golang.org/doc/go1.15, 已经8月份了,Go1.15
正式发布应该不远了。