【缺陷周话】第31期:错误的内存释放方法

栏目: C++ · 发布时间: 5年前

内容简介:使用错误的内存释放方法,将会导致非预期的程序行为,甚至可能导致程序崩溃。在《effective C++(第二版)》条目5“对应的 new 和 delete 要采用相同形式”中指出:“如果错误地释放对象中的元素,可能造成整个对象、甚至整个堆上的内存结构都发生损坏,从而发生内存泄漏,甚至导致程序崩溃”。CVE中也有一些与之相关的漏洞信息,从2018年1月至2019年4月,CVE中就有3条相关漏洞信息。漏洞信息如下:

【缺陷周话】第31期:错误的内存释放方法

1、错误的内存释放方法

C语言中常见的内存申请函数包括malloc()、 realloc()、 calloc(),它们虽然功能不同,但都对应同一个内存释放函数 free(),C++中对内存的申请和释放采用new/delete、new []/delete[] 方式。不管是 C 语言还是 C++ 语言,当编写源代码时要根据内存申请的方法不同来对应地选择内存释放方法,避免使用错误的内存释放。例如:混合使用C/C++的内存申请/释放,或混合使用标量和矢量的内存申请/释放。

详细请参见 CWE-762:Mismatched_Memory_Management_Routines。

2、 错误的内存释放方法的危害

使用错误的内存释放方法,将会导致非预期的程序行为,甚至可能导致程序崩溃。在《effective C++(第二版)》条目5“对应的 new 和 delete 要采用相同形式”中指出:“如果错误地释放对象中的元素,可能造成整个对象、甚至整个堆上的内存结构都发生损坏,从而发生内存泄漏,甚至导致程序崩溃”。

CVE中也有一些与之相关的漏洞信息,从2018年1月至2019年4月,CVE中就有3条相关漏洞信息。漏洞信息如下:

CVE 漏洞概况
CVE-2018-14948 dilawar sound2017-11-27 及之前版本中的 wav-file.cc文件存在错误的内存释放方法漏洞 (new[]/delete)。
CVE-2018-14947 PDF2JSON 0.69 版本中的 XmlFonts.cc 文件的‘XmlFontAccu::CSStyle’函数存在错误的内存释放漏洞(new[]/delete)。
CVE-2018-14946 PDF2JSON 0.69 版本中的 ImgOutputDev.cc 文件的 HtmlString 类存在错误的内存方法漏洞 (malloc/delete)。

3、示例代码

示例源于 Samate Juliet Test Suite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE762_Mismatched_Memory_Management_Routines__new_array_delete_char_01.cpp。

3.1缺陷代码

【缺陷周话】第31期:错误的内存释放方法

在上述示例代码中,第31行使用 new[] 创建对象数组,在第34行使用 delete 进行释放,由于在释放对象数组时,没有使用 new[] 对应的 delete[],因此存在“错误的内存释放方法”问题。

使用代码卫士对上述示例代码进行检测,可以检出“错误的内存释放方法”缺陷,显示等级为中。如图1所示:

【缺陷周话】第31期:错误的内存释放方法

图1:错误的内存释放方法的检测示例

3.2 修复代码

【缺陷周话】第31期:错误的内存释放方法

在上述修复代码中,Samate 给出的修复方式为:在第31行通过 new[] 创建对象数组,并在第33行使用 delete[] 进行释放。从而避免了错误的内存释放方法。

使用代码卫士对修复后的代码进行检测,可以看到已不存在“错误的内存释放方法”缺陷。如图2:

【缺陷周话】第31期:错误的内存释放方法

图2:修复后检测结果

4、  如何避免错误的内存释放方法

要避免错误的内存释放方法,需要注意以下几点:

(1)在进行内存释放时,明确内存申请使用的方法,避免由于程序结构复杂、人员疏忽而导致使用了错误的释放方法。

(2)使用源代码静态分析工具,可以有效对该类问题进行检测。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

机器学习

机器学习

周志华 / 清华大学出版社 / 2016-1-1 / 88.00元

机器学习是计算机科学与人工智能的重要分支领域. 本书作为该领域的入门教材,在内容上尽可能涵盖机器学习基础知识的各方面。 为了使尽可能多的读者通过本书对机器学习有所了解, 作者试图尽可能少地使用数学知识. 然而, 少量的概率、统计、代数、优化、逻辑知识似乎不可避免. 因此, 本书更适合大学三年级以上的理工科本科生和研究生, 以及具有类似背景的对机器学 习感兴趣的人士. 为方便读者, 本书附录给出了一......一起来看看 《机器学习》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具