CS.UFR

使用已释放的资源

因为 C# 有一个垃圾回收器,所以它能够在很大程度上免受许多内存问题的影响。但是,使用非托管资源的对象(例如 IDisposable 对象)仍然很容易受到释放后使用 bug 的影响。CS.UFR 检查器会标记出使用已处置资源的情况。

漏洞与风险

访问已处置的 IDisposable 对象将引发异常,进而可能导致程序在未完成处理的情况下提前终止。

漏洞代码示例

复制
   using System.IO;
    
   namespace Example
   {
       class Program
       {
           static void Main(string[] args)
           {
               BinaryWriter bw = new BinaryWriter(new FileStream("aaa.txt", FileMode.Open)); // Or, any other IDisposable
              bw.Dispose();
   
              bw.Write("bbb"); //@ CS.UFR.我们正在访问已处置的资源。
          }
   
      }
  }

在此示例中,当代码访问已处置的资源时,Klocwork 会在第 12 行报告 CS.UFR 缺陷。

修正代码示例

复制
   using System.IO;
    
   namespace Example
   {
       class Program
       {
           static void Main(string[] args)
           {
               BinaryWriter bw = new BinaryWriter(new FileStream("aaa.txt", FileMode.Open)); // Or, any other IDisposable
              bw.Write("bbb"); //@no CS.UFR.
              bw.Dispose();
          }
   
      }
  }

安全培训

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