cwe - 193:错误
视图定制的信息:
![]() ![]()
![]() ![]()
![]() ![]()
![]() 语言 类:不是特定于语言的患病率(待定) ![]()
示例1 下面的代码分配内存的最大数量的小部件。然后获得指定数量的小部件,确保用户不要求太多。然后初始化数组的元素使用InitializeWidget ()。因为小部件的数量可以为每个请求不同,插入一个空指针的代码意味着最后一个部件的位置。
(坏的代码)
例如语言:C
int我;
unsigned int numWidgets; 小部件* * WidgetList; numWidgets = GetUntrustedSizeValue (); 如果((numWidgets = = 0) | | (numWidgets > MAX_NUM_WIDGETS)) {
ExitError(“不正确的请求数量的小部件!”); }WidgetList =(小部件* *)malloc (numWidgets * sizeof(小部件*)); printf (" WidgetList ptr = % p \ n ", WidgetList); (我= 0;我< numWidgets;我+ +){
WidgetList[我]= InitializeWidget (); }WidgetList [numWidgets] =零; showWidgets (WidgetList); 然而,这段代码包含一个这些计算错误(-cwe - 193)。它分配足够的空间来包含指定数量的部件,但不包括空指针的空间。因此,分配缓冲区比它应该是(小cwe - 131)。如果用户请求MAX_NUM_WIDGETS,有一个界外写(cwe - 787当零分配。根据环境和编译设置,这可能会导致内存泄露。 示例2 在本例中,代码不考虑终止null字符,并写一个字节缓冲区的末尾。 第一次调用strncat()附加到20个字符加上终止null字符fullname []。有足够的空间分配,而且没有弱点与第一个电话。然而,第二个调用strncat()可能会附加一个20个字符。不考虑终止null字符的代码由strncat自动添加()。这个终止null字符将被写入一个字节之外的最后fullname[]缓冲区。因此存在一个错误与第二strncat()调用,作为第三个参数应该19。
(坏的代码)
例如语言:C
char firstname [20];
char lastname [20]; char fullname [40]; fullname [0] = ' \ 0 '; strncat (fullname firstname 20); strncat(全名、lastname、20); 当使用一个函数像strncat()必须离开最后一个免费的字节缓冲区的终止null字符,这样就避免了这些弱点。-此外,strncat()的最后一个参数是附加的字符数,必须小于剩余空间的缓冲区。小心不要只使用缓冲区的总大小。
(好的代码)
例如语言:C
char firstname [20];
char lastname [20]; char fullname [40]; fullname [0] = ' \ 0 '; strncat (fullname, firstname, sizeof (fullname) strlen (fullname) 1); strncat (fullname, lastname, sizeof (fullname) strlen (fullname) 1); 示例3 错误也可以体现在阅读字符的字符数组一个for循环中有一个错误的延续状况。
(坏的代码)
例如语言:C
#定义PATH_SIZE 60
字符的文件名(PATH_SIZE); (我= 0;我< = PATH_SIZE;我+ +){
字符c = getc ();
如果(c = = EOF) {
文件名(我)= ' \ 0 '; }文件名[我]= getc (); 在这种情况下,正确的延续状况如下所示。
(好的代码)
例如语言:C
(我= 0;我< PATH_SIZE;我+ +){
… 示例4 另一个例子的错误可以发生在使用sprintf库函数将一个字符串变量复制到一个格式化的字符串变量和原始字符串变量来自不受信任的来源。在接下来的例子中,本地函数,setFilename用于存储数据库文件名的价值但首先使用sprintf文件名格式。setFilename函数包含一个输入参数与文件的名称用作复制源sprintf函数。sprintf函数将复制文件名字符数组的大小20和指定的格式新变量16字符文件扩展名.dat紧随其后。
(坏的代码)
例如语言:C
int setFilename (char *文件名){
char[20]名称; }sprintf(名称,“% 16 s。dat”,文件名); int成功= saveFormattedFilenameToDB(名称); 返回成功; 然而这将导致一个错误如果原始文件名就是16字符或更大,因为16字符的格式与文件扩展名是20个字符并没有考虑所需零终结者将放置在结束的字符串。
![]()
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |