From d70e27db9babf17006f14494c5fe48a43aaf2941 Mon Sep 17 00:00:00 2001 From: Brother Beer Date: Thu, 3 Feb 2022 11:23:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B2=BE=E7=82=BC=E8=BE=9E=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- c-cpp-rules.json | 2 +- c-cpp-rules.md | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/c-cpp-rules.json b/c-cpp-rules.json index 4ebadfa..85c571c 100644 --- a/c-cpp-rules.json +++ b/c-cpp-rules.json @@ -1629,7 +1629,7 @@ "ID_multiAllocation": { "checkPoint": "在一个表达式语句中最多使用一次 new", "level": "warning", - "comment": "在对象化资源管理的基础上,如果表达式语句多次使用 new,一旦某个构造函数抛出异常,仍会造成内存泄漏。", + "comment": "如果表达式语句多次使用 new,一旦某个构造函数抛出异常,会造成内存泄漏。", "tag": "resource", "reference": "C++ Core Guidelines R.13" }, diff --git a/c-cpp-rules.md b/c-cpp-rules.md index 6d834bf..3e97661 100644 --- a/c-cpp-rules.md +++ b/c-cpp-rules.md @@ -1184,7 +1184,7 @@ lstrcat、lstrcatA、lstrcatW、lstrcpy、lstrcpyA、lstrcpyW 示例: ``` char buf[100]; -gets(buf); // Non-compliant +gets(buf); // Non-compliant ``` 例中 gets 函数无法检查缓冲区的大小,一旦输入超过了 buf 数组的边界,程序的数据或流程就会遭到破坏,这种情况也会成攻击者的常用手段,可参见 ID\_bufferOverflow 的进一步说明。如果代码中存在 gets 等函数,可以直接判定程序是有漏洞的。 @@ -1424,7 +1424,7 @@ const char* fmt = foo(); .... printf(fmt, a, b, c); // Non-compliant ``` -例中格式化字符串 fmt 是变量,这种方式较为严重地降低了代码的可读性,而且要注意如果 fmt 可受外界影响,则可能被攻击者利用造成不良后果。 +例中格式化字符串 fmt 是变量,这种方式可读性较差,而且要注意如果 fmt 可受外界影响,则可能被攻击者利用造成不良后果。 应将 fmt 改为常量: ``` @@ -1976,7 +1976,7 @@ std::move 宣告对象的数据即将被转移到其他对象,转移之后对 ``` string foo(string a) { string b = std::move(a); - return a; // Non-compliant + return a + b; // Non-compliant } ``` 例中 a 对象的数据被转移到 b 对象,之后 a 对象不再有效,对 a 重新赋值之前访问 a 属于逻辑错误。 @@ -2226,7 +2226,7 @@ ID_multiAllocation     :drop_of_blood: resource warning
-在对象化资源管理的基础上,如果表达式语句多次使用 new,一旦某个构造函数抛出异常,仍会造成内存泄漏。 +如果表达式语句多次使用 new,一旦某个构造函数抛出异常,会造成内存泄漏。 示例: ``` @@ -2367,7 +2367,7 @@ ID_dynamicAllocation     :drop_of_blood: resource warni
-标准库提供的动态内存分配方法,其算法或策略不在使用者的控制之内,很多细节是标准没有规定的,而且也是内存耗尽等问题的根源,有高可靠性要求的嵌入式系统应选取本规则。 +标准库提供的动态内存分配方法,其算法或策略不在使用者的控制之内,很多细节是标准没有规定的,而且也是内存耗尽等问题的根源,有高可靠性要求的嵌入式系统应避免动态内存分配。 在内存资源有限的环境中,由于难以控制具体的分配策略,很可能会导致已分配的空间用不上,未分配的空间不够用的情况。而在资源充足的环境中,也应尽量避免动态分配,如果能在栈上创建对象,就不应采用动态分配的方式,以提高效率并降低资源管理的复杂性。 @@ -2378,7 +2378,7 @@ void foo() { .... } ``` -例中 vector 容器使用了动态内存分配方法,容量的增长策略可能会导致内存空间的浪费,使程序难以稳定运行。 +例中 vector 容器使用了动态内存分配方法,容量的增长策略可能会导致内存空间的浪费,甚至使程序难以稳定运行。