【缺陷周话】第55期:返回值未初始化

阅读量593722

发布时间 : 2019-10-16 12:00:12

 

1、返回值未初始化

在函数返回语句中,如果将未初始化变量返回,而函数的调用方对该返回值进行了使用,会因使用的变量未初始化,造成程序运行产生意料之外的行为。

详细请参见CWE-665: Improper Initialization
 

2、“返回值未初始化”的危害

返回值未初始化的危害取决于函数调用方对未初始化返回值的使用,通常会触发非预期的程序行为 

3、示例代码

示例源于toyota-itc-benchmarks-master (https://github.com/regehr/itc-benchmarks),源文件名:uninit_var.c。

3.1 缺陷代码

在上述示例代码中,第71行声明 int 类型变量 ret,但没有进行初始化,第72行通过 if 语句进行条件判断,当条件成立的情况下,为 ret 赋值为1,在第74行通过return 语句返回。由于 if(0) 恒为 false,因此 ret 不会被赋值,当第74行返回时,返回值是未初始化的,存在“返回值未初始化”问题。

使用代码卫士对上述示例代码进行检测,可以检出“返回值未初始化”缺陷,显示等级为中。如图1所示:

图1:“返回值未初始化”检测示例

3.2 修复代码

在上述修复代码中,修改第72行的 if 语句条件,对 ret 进行赋值,当第74行进行返回时,此时 ret 已经被赋值,从而避免了返回值未初始化问题。

使用代码卫士对修复后的代码进行检测,可以看到已不存在“返回值未初始化”缺陷。如图2:

图2:修复后检测结果

 

4、如何避免“返回值未初始化”

(1)在进行变量声明时,应考虑对其进行初始化(或采用默认初始化的策略)。
(2)使用源代码静态分析工具,可以有效检出源代码中的未初始化问题。

本文由奇安信代码卫士原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/188805

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
奇安信代码卫士
分享到:微信

发表评论

奇安信代码卫士

奇安信代码卫士是国内第一家专注于软件开发安全的产品线,产品涵盖代码安全缺陷检测、软件编码合规检测、开源组件溯源检测三大方向,分别解决软件开发过程中的安全缺陷和漏洞问题、编码合规性问题、开源组件安全管控问题。微信公号:codesafe。

  • 文章
  • 387
  • 粉丝
  • 104

热门推荐

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66