cwe - 763:释放无效的指针或引用
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关的视图”方案及数据保护措施”(cwe - 1340)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这段代码尝试标记一个字符串,并将其变成一个数组使用strsep函数,插入一个\ 0字节的空格或制表符。完成循环后,美联社指向一个数组中的每个字符串输入字符串中的位置。
(坏的代码)
例如语言:C
据美联社,char * * * argv [10], * inputstring;
(美联社= argv;(*美联社= strsep (&inputstring \ t)) !) =零;
如果(* *美联社! = ' \ 0 ')
如果(+ + ap > = argv [10])
打破;
/…… 免费(美联社[4]); 自strsep不是分配新的内存,释放一个元素的数组相当于免费inputstring中间的指针。 示例2 这个例子分配BarObj对象使用新的操作符在c++中,然而,程序员然后重新分配对象使用免费的(),这可能会导致意想不到的行为。
(坏的代码)
例如语言:c++
空白foo () {
新BarObj BarObj * ptr = ()
/ * ptr这里* /做一些工作 … 免费(ptr); 相反,程序员应该要么创建对象的malloc家庭功能,否则删除对象的删除操作。
(好的代码)
例如语言:c++
空白foo () {
新BarObj BarObj * ptr = ()
/ * ptr这里* /做一些工作 … 删除ptr; 示例3 在这个例子中,程序员动态分配一个缓冲区来保存一个字符串,然后搜索一个特定的角色。完成搜索后,程序员试图释放分配的内存和成功或失败返回给调用者。注意:为了简化,本例中使用硬编码的字符串“搜索我!”和一个常量字符串的长度20。
(坏的代码)
例如语言:C
#定义成功(1)
#定义失败(0) int contains_char (char c) {
char * str;
str = (char *) malloc (20 * sizeof (char)); strcpy (str,“搜索我!”); 而(* str ! = NULL) {
如果(* str = = c) {
/ *匹配字符,免费字符串并返回成功* / 免费(str); 返回成功; / *不匹配,增加指针并尝试下一个char * / str = str + 1; / *我们不匹配字符的字符串,免费mem和返回失败* / 免费(str); 返回失败; 然而,如果字符不是一开始的字符串,或如果它不是字符串,那么指针不会开始的时候当程序员释放缓冲区。 而不是释放缓冲区的指针在中间,程序员可以使用一个索引指针遍历内存或抽象内存计算通过使用数组索引。
(好的代码)
例如语言:C
#定义成功(1)
#定义失败(0) int cointains_char (char c) {
char * str;
int i = 0; str = (char *) malloc (20 * sizeof (char)); strcpy (str,“搜索我!”); 虽然(我< strlen (str)) {
如果(str[我]= = c) {
/ *匹配字符,免费字符串并返回成功* / 免费(str); 返回成功; / *不匹配,增加指针并尝试下一个char * / 我=我+ 1; / *我们不匹配字符的字符串,免费mem和返回失败* / 免费(str); 返回失败; 示例4 考虑下面的代码解析应用程序的上下文中提取命令的用户数据。目的是解析每个命令并将它添加到队列的命令,执行丢弃每个畸形的条目。
(坏的代码)
例如语言:C
/ /硬编码输入长度为简单起见 char *输入= (char *) malloc (40 * sizeof (char)); char *托托; char * 9 = " \ t”; get_user_input(输入); / *以下循环将解析和处理每个令牌在输入字符串* / 托托= strtok(输入、9月); 而(零! =托托){
如果(isMalformed (tok)) {
* / / *忽视抛弃坏数据 免费(托托); 其他{
add_to_command_queue(托托); }托托= strtok (NULL, 9月)); 在上面的代码尝试空闲内存与糟糕的命令,因为分配的内存都是在一块,它必须一起被释放。 解决这个问题的一个方法是将命令复制到一个新的内存位置之前将它们放到队列中。所有命令都被处理之后,可以安全地释放的内存。
(好的代码)
例如语言:C
/ /硬编码输入长度为简单起见 char *输入= (char *) malloc (40 * sizeof (char)); char *托托,*命令; char * 9 = " \ t”; get_user_input(输入); / *以下循环将解析和处理每个令牌在输入字符串* / 托托= strtok(输入、9月); 而(零! =托托){
如果(! isMalformed(命令)){
/ * * /复制和排队好数据 命令= (char *) malloc ((strlen (tok) + 1) * sizeof (char)); 拷贝字符串(命令,托托); add_to_command_queue(命令); 托托= strtok (NULL, 9月)); 免费(输入)
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |