误写zlib带来的问题

来源:互联网 发布:怎么删除软件 编辑:程序博客网 时间:2024/05/16 17:10

网络通信数据较大,用到了zlib.

最近碰到一个崩溃的问题,追踪后发现zlib的使用有问题。

而后自己写了一段测试代码,确实是使用有问题。


BYTE pCompressData[3] = {0};
DWORD dwAfterCompressSize = 1024;
BYTE* pBitmapData = (BYTE*)malloc(1024*1024);
  int iRet = compress( pCompressData, &dwAfterCompressSize, pBitmapData, 1024*1024);

比较容易让人误解的是,iRet的返回值是Z_BUF_ERROR,让人以为zlib正常运行了。

实际上对于zlib来说,它确实正常运行了,但是它访问了不该访问的内存,造成了不可预知的问题;而后程序崩溃,并且定位不到错误,那也就是顺理成章的事情了。


这件事有两个教训:

作为接口的提供者,尽可能多的作参数的合法性检查;当然在这次崩溃的情况下,不是合法性检查不严谨引起的;

作为借口的调用者,尽可能多的作参数的合法性检查;因为一不小心,会访问到不改访问的内存地址。

0 0
原创粉丝点击