【缺陷周话】第31期:错误的内存释放
1、错误的内存释放方法
C语言中常见的内存申请函数包括malloc()
、 realloc()
、 calloc()
,它们虽然功能不同,但都对应同一个内存释放函数 free()
,C++中对内存的申请和释放采用new/delete、new []/delete[] 方式。不管是 C 语言还是 C++ 语言,当编写源代码时要根据内存申请的方法不同来对应地选择内存释放方法,避免使用错误的内存释放。例如:混合使用C/C++的内存申请/释放,或混合使用标量和矢量的内存申请/释放。
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行使用 new[]
创建对象数组,在第34行使用 delete
进行释放,由于在释放对象数组时,没有使用 new[]
对应的 delete[]
,因此存在“错误的内存释放方法”问题。
使用代码卫士对上述示例代码进行检测,可以检出“错误的内存释放方法”缺陷,显示等级为中。如图1所示:
图1:错误的内存释放方法的检测示例
3.2 修复代码
在上述修复代码中,Samate 给出的修复方式为:在第31行通过 new[]
创建对象数组,并在第33行使用 delete[]
进行释放。从而避免了错误的内存释放方法。
使用代码卫士对修复后的代码进行检测,可以看到已不存在“错误的内存释放方法”缺陷。如图2:
图2:修复后检测结果
4、 如何避免错误的内存释放方法
要避免错误的内存释放方法,需要注意以下几点:
(1)在进行内存释放时,明确内存申请使用的方法,避免由于程序结构复杂、人员疏忽而导致使用了错误的释放方法。
(2)使用源代码静态分析工具,可以有效对该类问题进行检测。
以上是【缺陷周话】第31期:错误的内存释放的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

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

PHP代码审计技术和实用工具推荐概述:随着互联网的快速发展,网站的安全问题变得日益突出。而PHP作为一种广泛应用于互联网开发的语言,其代码安全审计成为非常重要的一个环节。本文将介绍PHP代码审计的一些基本技术并推荐几款实用的工具。一、代码审计技术扫描敏感函数在PHP代码审计中,首先需要关注的是敏感函数的使用。例如,eval()函数可以执行任意传入的代码,因此

随着网络安全意识的提高和黑客攻击手段的不断升级,网站安全问题已经成为企业与个人不可回避的问题。在这个问题尤为严峻的时代,PHP作为一种流行的Web开发语言,越来越多的企业或个人通过PHP来开发自己的网站。而为了确保PHP网站的安全性,代码审计是不可缺少的一个环节。什么是代码审计?代码审计是通过对网站代码进行分析,找出其中的安全漏洞的过程。这是一种系统的、深入

如何使用Python进行软件代码审计随着软件应用的快速发展,代码的质量和安全问题也日益受到关注。代码审计是一种评估和检查代码质量、发现潜在漏洞和安全问题的过程。Python作为一种灵活且功能丰富的编程语言,被广泛应用于代码审计的实践中。本文将简要介绍如何使用Python进行软件代码审计。一、了解代码审计的基本概念在进行代码审计之前,我们首先需要了解代码审计的

如何处理PHP开发中的代码审计和漏洞修复随着互联网的快速发展,PHP作为一种被广泛应用的编程语言,在网站和应用程序的开发中占据着重要地位。然而,由于其开源的特性,PHP代码也容易被黑客利用,造成安全漏洞。对于PHP开发者而言,代码审计和漏洞修复是必须要重视的问题。本文将详细介绍如何处理PHP开发中的代码审计和漏洞修复,并附上具体的代码示例。一、代码审计代码审

如何进行PHP后端功能开发的安全防护?随着互联网的普及和相关技术的快速发展,PHP作为一种被广泛采用的后端开发语言,使用者也越来越多。然而,随之而来的安全问题也变得不容忽视。为了保护用户数据和防止恶意攻击,开发人员需要重视PHP后端功能开发的安全性。本文将介绍一些PHP后端功能开发中常见的安全防护措施,并给出相应的代码示例。输入验证和数据过滤在接收和处理用户

PHP是一种广泛使用的服务器端脚本语言,广泛应用于Web开发和动态网站构建。然而,随着互联网的快速发展和网络安全威胁的增加,安全问题也逐渐被广大开发者重视起来。在PHP开发中,安全代码审计技术起着至关重要的作用。本文将深入探讨PHP中的安全代码审计技术解析,帮助开发者更好地保护自己的应用程序。首先,我们需要理解什么是安全代码审计。安全代码审计是指对代码进行全

随着网络技术的不断发展,各种应用程序逐渐成为生活中不可缺少的一部分。而PHP作为一种广泛应用于Web开发的编程语言,在众多应用程序中也扮演着重要的角色。然而,对于PHP代码的安全性,经常被忽视和忽略。对于黑客和攻击者来说,PHP应用程序成为攻击的目标,而如何防范和预防攻击,则需要进行PHP代码审计。什么是PHP代码审计?PHP代码审计是指通过检查PHP代码,
