“混合最少量规则”规则集

这些微软混合最小规则重点关注支持公共语言运行时的 C++ 项目中的最关键问题,包括潜在安全漏洞和应用程序崩溃。应在您为支持公共语言运行时的 C++ 项目创建的任何自定义规则集中包含此规则集。

规则

说明

C6001

正在使用未初始化的内存

C6011

正在取消对空指针的引用

C6029

使用未经检查的值

C6053

调用中包含零终止

C6059

串联错误

C6063

格式函数缺少字符串参数

C6064

格式函数缺少整数参数

C6066

格式函数缺少指针参数

C6067

格式函数缺少字符串指针参数

C6101

正在返回未初始化的内存

C6200

索引超出缓冲区最大容量

C6201

索引超出堆栈缓冲区最大容量

C6270

格式函数缺少浮点参数

C6271

格式函数有多余参数

C6272

格式函数有非浮点参数

C6273

格式函数有非整型参数

C6274

格式函数有非字符参数

C6276

字符串强制转换无效

C6277

CreateProcess 调用无效

C6284

格式函数的对象参数无效

C6290

逻辑的-非按位智能-优先

C6291

逻辑非按位或优先

C6302

格式函数的字符字符串参数无效

C6303

格式函数的宽字符字符串参数无效

C6305

大小和计数使用不匹配

C6306

变量参数函数调用错误

C6328

潜在参数类型不匹配

C6385

读溢出

C6386

写溢出

C6387

参数值无效

C6500

无效特性属性

C6501

特性属性值冲突

C6503

引用不可为空

C6504

非指针为 空

C6505

Void 的 MustCheck

C6506

非指针或数组的缓冲区大小

C6507

在取消引用空的零不匹配

C6508

常量写访问

C6509

对前置条件使用了返回值

C6510

Null 终止于非指针

C6511

MustCheck 必须为 Yes 或 No

C6513

无缓冲区大小的元素大小

C6514

缓冲区大小超出数组大小

C6515

非指针缓冲区大小

C6516

特性无属性

C6517

不可读缓冲区的有效大小

C6518

不可写缓冲区的可写大小

C6519

无效的批注:“NeedsRelease”属性的值必须为 Yes 或 No

C6521

无效的字符串大小间接引用

C6522

无效大小字符串类型

C6523

无效的字符串大小参数

C6525

无效大小字符串不可访问位置

C6526

无效的字符串大小缓冲区类型

C6527

无效的批注: 无法对 void 类型的值使用 NeedsRelease 属性

C6530

无法识别的格式字符串样式

C6540

对此函数使用特性批注将使其现有的所有 __declspec 批注无效

C6551

大小规范无效: 表达式不可分析

C6552

Deref= 或 Notref= 无效: 表达式不可分析

C6701

该值不是有效的 Yes/No/Maybe 值:

C6702

该值不是字符串值

C6703

该值不是数字:

C6704

意外的批注表达式错误:

C6705

参数所需数目的注释不匹配参数的实际数目的注释

C6706

批注的意外批注错误:

C28021

所批注的参数必须是指针

C28182

取消对 NULL 指针的引用。指针包含与其他指针的空值。

C28202

对非静态成员进行了非法引用

C28203

对类成员的不明确引用。

C28205

在非法上下文中使用了 _Success_ 或 _On_failure_

C28206

左操作数指向 struct,使用'->'。

C28207

左操作数是 struct,使用“.”。

C28210

_On_failure_ 上下文的批注不得位于显式 pre 上下文中

C28211

SAL_context 需要静态上下文名称

C28212

批注需要指针表达式

C28213

_Use_decl_annotations_ 批注必须用于引用(无需修改)以前的声明。

C28214

特性参数名称必须为 p1...p9

C28215

typefix 无法应用于已具有 typefix 的参数

C28216

checkReturn批注仅适用于特定函数参数的后置条件。

C28217

对于函数,批注的参数数量与在文件中找到的数量不匹配

C28218

对于函数参数,批注的参数与在文件中找到的参数不匹配

C28219

批注中的参数应为枚举成员

C28220

批注中的参数应为整数表达式

C28221

批注中的参数应为字符串表达式

C28222

批注需要 __yes、__no 或 __maybe

C28223

对于批注,参数未找到预期的标记/标识符

C28224

批注需要参数

C28225

在批注中找到的所需参数的数量不正确

C28226

批注也不能为 PrimOp (在当前声明中)

C28227

批注也不能为 PrimOp (参见上一个声明)

C28228

批注参数:不能在批注中使用类型

C28229

批注不支持参数

C28230

参数类型没有成员

C28231

批注仅对数组有效

C28232

pre、post 或 deref 不适用于任何批注。

C28233

pre、post 或 deref 适用于块。

C28234

_at_ 表达式不适用于当前函数。

C28235

函数不能作为批注单独存在

C28236

不能在表达式中使用该批注

C28237

不再支持参数上的批注

C28238

参数上的批注有多个 value、stringValue 和 longValue。使用 paramn=xxx

C28239

参数上的批注同时具有 value、stringValue 或 longValue 之一和 paramn=xxx。仅使用 paramn=xxx

C28240

参数上的批注有 param2,但没有 param1

C28241

无法识别参数上函数的批注

C28243

参数上函数的批注需要的取消引用次数多于已批注的实际类型所允许的次数

C28245

函数的批注在非成员函数上批注“this”

C28246

函数的参数不匹配参数的类型批注

C28250

函数的注解不一致:上一个实例有错误

C28251

函数的注解不一致:此实例有错误

C28252

函数的批注不一致:参数在此实例上有另一个批注

C28253

函数的批注不一致:参数在此实例上有另一个批注

C28254

批注中不支持 dynamic_cast<>()。

C28262

在函数中找到了批注的语法错误(对于批注):

C28263

内部批注的条件批注中发现了语法错误

C28264

结果列表值必须是常量。

C28267

在函数中找到了批注的语法错误(对于批注):

C28272

检查时针对函数参数的批注与函数声明不一致

C28273

对于函数,线索与函数声明不一致

C28275

_Macro_value_ 的参数为 null

C28279

对于符号,已找到“begin”,但没有匹配的“end”

C28280

对于符号,发现了没有与之匹配的“begin”的“end”

C28282

格式字符串必须位于前置条件中:

C28285

对于函数,参数中有语法错误

C28286

对于函数,结尾附近有语法错误

C28287

对于函数, 批注中存在语法错误(无法识别的参数名)

C28288

对于函数,_At_() 批注中存在语法错误(无效的参数名)

C28289

对于函数: ReadableTo 或 WritableTo 没有用作参数的限制规范。

C28290

函数的批注包含的外部对象多于参数的实际数量

C28291

deref 级别 0 处的 post null/notnull 对于函数无意义。

C28300

运算符的不兼容类型的表达式操作数

C28301

函数的第一个声明没有批注

C28302

在批注上发现额外的 _Deref_ 运算符

C28303

在批注上发现不明确的 _Deref_ 运算符

C28304

发现对令牌应用了放置位置不正确的 _Notref_ 运算符

C28305

分析 token 时发现了错误。

C28350

该注释描述了在特定条件下不适用的情况.

C28351

批注描述了一种无法使用动态值(变量)的情况。

CA1001

那自己可支配领域类型应该是一次性的

CA1821

移除空的终结

CA2213

应释放可释放的字段

CA2231

重写 ValueType.Equals 时应重载相等运算符