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();
}
}
}