今天从系统中找出三个BUG,都与缓冲区溢出有关,真是教训深刻,这三个BUG一个是我过份信任协作程序传送过来的数据包(虽然是运行在本地机器上的自己编写的程序)而没有检查数据包的合法性,一个是同玿使用了不安全的sprintf函数而又偏偏给出了过小的缓冲区,另一个是另一位同事未检查函数返回值(或未仔细阅读函数编写者的注释)导致在函数失败的时候未成正确捕获。
寻找这三个BUG花了很多精力,总结教训:
- 永远不要相信任何数据来源,哪怕它来自自己公司编写的另一个协作程序
- 在团队中再次强调字符串函数的危险性,统一使用更安全的strsafe
- 在使用别人函数的时候一定要仔细阅读别人的注释,对一切返回值的函数进行返回值检查
- 编写函数给别人使用时,可以考虑用抛异常的方法替代返回错误值,强迫使用者检查函数是否成功
- 坚持在代码中尽量多的用assert、或编写自己的Log