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 正式发布应该不远了。
小狮博客