CS.NRE.FUNC.MIGHT

通过调用可能返回 null 的函数生成的对象引用值,可能显式取消引用,或通过调用可取消引用该值而无需检查 null 的函数来取消引用。

漏洞与风险

取消引用 null 对象引用是一个严重的运行时问题,该问题将导致一些操作系统的应用程序崩溃,并引发另一些操作系统出现运行时异常。

示例 1

复制
namespace CS.NRE.FUNC.MIGHT
{
    class Program
    {
        public Program foo()
        {
            if (flag)
                return null;
            
            return new Program();
        }


        public void var(bool b)
        {            
            Program a = foo();
            if (b)
                a.foo();
        }
        private bool flag;
    }
}

Klocwork 在第 18 行为变量 a 生成了一个问题报告 (CS.NRE.FUNC.MIGHT)。如果变量 a 已赋值给可能为 null 的值,并且该值通过调用第 16 行的 foo 函数生成,则在第 18 行取消引用该变量后,其仍可为 null。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。