Closed Pippinrao closed 2 years ago
这里做了一个不太好的约定:malloc返回地址必须8字节对齐 (大多数手册里的声明确实保证这个或至少支持内部类型); 所以实际代码还是安全的。
_zlib_decompress_open_by支持随便什么内存区都可以给它用,不必是malloc申请的;和它配对的是 _zlib_decompress_close_by,并不释放内存。
@Pippinrao 修复这个不必要和危险的耦合的代码已经提交,*by的2个配对函数也放到了一起,减少误用几率。
你看看提交。
@sisong 约定总是不安全的,特别是嵌入式的情况下分配没对齐的内存还是有可能出现的
Ps: 修复的速度也太快了,我还准备自己提交修改一下~
谢谢 反馈的问题
“我还准备自己提交修改一下”
欢迎继续提交代码上来
_zlib_decompress_open_by分配内存_mem_buf,对其进行对齐操作后赋值给self(_mem_buf可能不等于self)返回,该内存试图在_zlib_decompress_close时free,但是调用的是free(self),若self != _mem_buf(malloc的内存没有对齐时),这是未定义的行为,可能会导致进程coredump.