我试图找出导致这种情况的情况OverflowException
是否可能是静态代码分析可以捕获的东西。
//IntPtr position = ...
position = (IntPtr) ((int) position + stride);
上面的代码将 IntPtr 错误地转换为 32 位数字(而不是 64 位数字),这会导致OverflowException
内存指针具有 64 位地址。这只发生在 64 位版本的 Windows 上。
position = (IntPtr) ((long) position + stride);
这是修复,将 IntPtr 转换为 long 。
在我看来,静态代码分析可能会发现这样的事情。但是,即使使用Microsoft All Rules运行代码分析也不会返回有关此代码的任何结果。
有没有理由不将这样的事情作为一项发现提出来?或者是否有可能捕获它的规则集?