[Defect Weekly] Numéro 31 : Mauvaise libération de mémoire
1. Mauvaise méthode de libération de mémoire
Les fonctions courantes d'application de mémoire en langage C incluent malloc( )
, realloc()
, calloc()
, bien qu'ils aient des fonctions différentes, ils correspondent tous à la même fonction de libération de mémoire free()
L'application et la libération de mémoire en C++ utilisent new/delete, nouvelle méthode []/delete[]. Qu'il s'agisse du langage C ou du langage C++, lors de l'écriture du code source, vous devez choisir la méthode de libération de mémoire en fonction des différentes méthodes d'application de la mémoire pour éviter d'utiliser la mauvaise version de mémoire. Par exemple : utilisation mixte de l'allocation/libération de mémoire C/C++, ou utilisation mixte de l'allocation/libération de mémoire scalaire et vectorielle. 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. Les méfaits des méthodes de libération de mémoire incorrectes
Une libération de mémoire incorrecte peut provoquer un comportement erroné inattendu du programme, voire provoquer le programme s'écraser. L'article 5 de "Effective C++ (Second Edition)" "Les new et delete correspondants doivent adopter la même forme" souligne : "Si les éléments de l'objet sont libérés de manière incorrecte, cela peut entraîner la destruction de l'objet entier ou même de la structure mémoire entière. le tas doit être endommagé. La corruption peut entraîner des fuites de mémoire ou même des plantages de programmes.
CVE | Présentation de la vulnérabilité |
---|---|
CVE-2018-14948 | Le fichier wav-file.cc dans Dilawar Sound2017-11-27 et versions précédentes Il existe une vulnérabilité de méthode de libération de mémoire incorrecte (new[]/delete). |
CVE-2018-14947 | La fonction 'XmlFontAccu::CSStyle' du fichier XmlFonts.cc dans PDF2JSON version 0.69 présente une vulnérabilité de libération de mémoire incorrecte ( nouveau[]/supprimer). |
CVE-2018-14946 | Le fichier ImgOutputDev.cc dans PDF2JSON version 0.69 présente une vulnérabilité de méthode de mémoire incorrecte (malloc/delete) dans la classe HtmlString . |
3. Exemple de code
L'échantillon provient de Samate Juliet Test Suite for C. / C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php), nom du fichier source : CWE762_Mismatched_Memory_Management_Routines__new_array_delete_char_01.cpp.3.1 Code défaut
![[Defects Weekly] Issue 31 : Wrong Memory Release](https://img.php.cn/upload/article/000/887/227/168485445778735.jpg)
new[]
crée un tableau d'objets et le libère en utilisant delete
à la ligne 34. Lors de la libération du tableau d'objets, la classe new[]
correspondant delete[]
n'est pas utilisé, il existe donc "Mémoire incorrecte problème de méthode de libération". #🎜🎜##🎜🎜#Utilisez Code Guard pour détecter l'exemple de code ci-dessus, et vous pouvez détecter le défaut de "mauvaise méthode de libération de mémoire", et le niveau d'affichage est moyen. Comme le montre la figure 1 : #🎜🎜##🎜🎜#
#🎜🎜#3.2 Code de réparation# 🎜🎜 #
#🎜🎜#![[Défauts hebdomadaires] Problème du chapitre 31 : faux libération de mémoire](https://img.php.cn/upload/article/000/887/227/168485445736601.jpg)
à la ligne 31 new[] code> crée un tableau d'objets et le libère en utilisant <code class="prettyprint code-in-text Prettyprinted">delete[]
à la ligne 33. Cela évite les méthodes incorrectes de libération de mémoire. #🎜🎜##🎜🎜#Utilisez Code Guard pour détecter le code réparé, et vous pourrez voir que le défaut "mauvaise méthode de libération de mémoire" n'existe plus. Comme le montre la figure 2 : #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜# Figure 2 : Résultats de détection après réparation#🎜🎜##🎜🎜##🎜🎜#4 . Comment éviter les mauvaises méthodes de libération de mémoire #🎜🎜##🎜🎜##🎜🎜# Pour éviter les mauvaises méthodes de libération de mémoire, vous devez faire attention aux points suivants : #🎜🎜##🎜🎜# (1) Lors de la libération mémoire, soyez clair La méthode utilisée pour l'application de la mémoire évite d'utiliser la mauvaise méthode de libération en raison de la structure complexe du programme et de la négligence du personnel. #🎜🎜##🎜🎜# (2) L'utilisation d'outils d'analyse statique du code source permet de détecter efficacement ce type de problème. #🎜🎜#Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)
![[Defect Weekly] Numéro 31 : Mauvaise libération de mémoire](https://img.php.cn/upload/article/000/887/227/168485445614044.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
1. Mauvaise méthode de libération de mémoire. Les fonctions courantes d'application de mémoire en langage C incluent malloc(), realloc() et calloc(). Bien qu'elles aient des fonctions différentes, elles correspondent toutes à la même fonction de libération de mémoire free(). la mémoire dans l'application et la version C++ adoptent les méthodes new/delete, new[]/delete[]. Qu'il s'agisse du langage C ou du langage C++, lors de l'écriture du code source, vous devez choisir la méthode de libération de mémoire en fonction des différentes méthodes d'application de la mémoire pour éviter d'utiliser la mauvaise version de mémoire. Par exemple : utilisation mixte de l'allocation/libération de mémoire C/C++, ou utilisation mixte de l'allocation/libération de mémoire scalaire et vectorielle. 2. Les dommages causés par une mauvaise méthode de libération de mémoire.

Aperçu des techniques d'audit de code PHP recommandées et des outils pratiques : Avec le développement rapide d'Internet, les problèmes de sécurité des sites Web sont devenus de plus en plus importants. En tant que langage largement utilisé dans le développement Internet, l'audit de sécurité du code PHP est devenu un maillon très important. Cet article présentera quelques techniques de base pour l'audit du code PHP et recommandera plusieurs outils pratiques. 1. La technologie d'audit de code analyse les fonctions sensibles. Dans l'audit de code PHP, la première chose à laquelle il faut prêter attention est l'utilisation des fonctions sensibles. Par exemple, la fonction eval() peut exécuter n'importe quel code transmis, donc

Avec l’amélioration de la sensibilisation à la sécurité des réseaux et l’amélioration continue des méthodes d’attaque des pirates informatiques, les problèmes de sécurité des sites Web sont devenus un problème incontournable pour les entreprises et les particuliers. À une époque où le problème est particulièrement grave, PHP est un langage de développement Web populaire, et de plus en plus d'entreprises ou de particuliers développent leurs sites Web via PHP. Afin d’assurer la sécurité des sites PHP, l’audit de code est un maillon indispensable. Qu’est-ce que l’audit de code ? L'audit de code est le processus d'analyse du code d'un site Web pour détecter les vulnérabilités de sécurité. Il s’agit d’une étude systématique et approfondie

Comment utiliser Python pour l'audit du code logiciel Avec le développement rapide des applications logicielles, les problèmes de qualité du code et de sécurité font également l'objet d'une attention croissante. L'audit de code est un processus d'évaluation et de vérification de la qualité de votre code et de découverte des vulnérabilités et des problèmes de sécurité potentiels. En tant que langage de programmation flexible et riche en fonctionnalités, Python est largement utilisé dans la pratique de l'audit de code. Cet article présentera brièvement comment utiliser Python pour l'audit du code logiciel. 1. Comprendre les concepts de base de l'audit de code Avant de procéder à un audit de code, nous devons d'abord comprendre la signification de l'audit de code.

Comment gérer l'audit de code et la réparation des vulnérabilités dans le développement PHP Avec le développement rapide d'Internet, PHP, en tant que langage de programmation largement utilisé, occupe une position importante dans le développement de sites Web et d'applications. Cependant, en raison de sa nature open source, le code PHP peut également être facilement exploité par des pirates informatiques, entraînant des failles de sécurité. Pour les développeurs PHP, l’audit du code et la réparation des vulnérabilités sont des problèmes auxquels il faut prêter attention. Cet article détaillera comment gérer l'audit du code et la correction des vulnérabilités dans le développement PHP, avec des exemples de code spécifiques. 1. Audit de codeAudit de code

Comment assurer la protection de la sécurité dans le développement de fonctions back-end PHP ? Avec la popularisation d'Internet et le développement rapide des technologies associées, PHP, en tant que langage de développement back-end largement adopté, compte de plus en plus d'utilisateurs. Cependant, les problèmes de sécurité qui en résultent ne peuvent être ignorés. Afin de protéger les données des utilisateurs et de prévenir les attaques malveillantes, les développeurs doivent prêter attention à la sécurité du développement des fonctions back-end PHP. Cet article présentera certaines mesures de protection de sécurité courantes dans le développement de fonctions back-end PHP et donnera des exemples de code correspondants. Validation des entrées et filtrage des données lors de la réception et du traitement des utilisateurs

PHP est un langage de script côté serveur largement utilisé dans le développement Web et la création de sites Web dynamiques. Cependant, avec le développement rapide d’Internet et l’augmentation des menaces à la sécurité des réseaux, les questions de sécurité sont progressivement devenues de plus en plus importantes pour les développeurs. Dans le développement PHP, la technologie d’audit du code de sécurité joue un rôle essentiel. Cet article explorera en profondeur l'analyse de la technologie d'audit du code de sécurité en PHP pour aider les développeurs à mieux protéger leurs applications. Tout d’abord, nous devons comprendre ce qu’est l’audit des codes de sécurité. L'audit du code de sécurité fait référence à un examen complet du code

Avec le développement continu de la technologie des réseaux, diverses applications sont progressivement devenues un élément indispensable de la vie. En tant que langage de programmation largement utilisé dans le développement Web, PHP joue également un rôle important dans de nombreuses applications. Cependant, la sécurité du code PHP est souvent négligée et ignorée. Pour les pirates et les attaquants, les applications PHP deviennent des cibles d'attaques, et comment se prémunir contre et prévenir les attaques nécessite un audit du code PHP. Qu’est-ce que l’audit de code PHP ? L'audit du code PHP fait référence à la vérification du code PHP,
