Go语言io/ioutil包提供了ReadAll()函数用于读取并存储数据,该函数在读取数据的过程中会不断的申请新的内存空间直到将请求的数据存储完为止,经测试发现,有不少使用go语言开发的公链在处理用户通过RPC发送过来的请求数据包时会优先使用ReadAll()函数来读取并存储请求数据包数据,而在读取与存储之前并未对数据包的大小做限制,如果构造一个非常非常大的请求数据包让ReadAll()来处理,则在这个处理过程中会因为不断的申请内存空间最终发生OOM。
Go语言io/ioutil包提供了ReadAll()函数用于读取并存储数据,该函数在读取数据的过程中会不断的申请新的内存空间直到将请求的数据存储完为止,经测试发现,有不少使用go语言开发的公链在处理用户通过RPC发送过来的请求数据包时会优先使用ReadAll()函数来读取并存储请求数据包数据,而在读取与存储之前并未对数据包的大小做限制,如果构造一个非常非常大的请求数据包让ReadAll()来处理,则在这个处理过程中会因为不断的申请内存空间最终发生OOM。