c# - 无溢出检查的整数运算

标签 c# asp.net ascx integer-overflow secure-coding

您好,我刚刚对我的代码运行了静态代码分析,但我不断收到错误

"Integer Operation Without Overflow Check"

有人可以帮我解决这个问题或者告诉我它到底意味着什么吗?我已经尝试使用检查关键字来解决此问题,但当我运行代码时它仍然出现。

List<String> emailList = new List<string>();

if (tbRecipients.Text.Contains(','))
{
    string[] splits = tbRecipients.Text.Split(',');

    for (int i = 0; i < splits.Length; i++)
    {
        if (splits[i].Contains(';'))
        {
            emailList.AddRange(splits[i].Split(';').ToList());
        }
        else
        {
            emailList.Add(splits[i]);
        }
    }
}

ASPX

<asp:TextBox ID="tbRecipients"  runat="server"  ></asp:TextBox>  

最佳答案

您收到的消息表明您可能会在 int 上遇到“溢出” ,那是因为int位于C#32 bit这样你只能存储小于 2^31 的数字。所以VCG告诉你,在做几个i++的同时你最终可能会得到 i = 2^31这会溢出你的 int并产生意外的代码行为。

只有在 splitted.Length == int.MaxValue 的情况下,这才可能发生在您的代码中自 splitted是一个数组并且 Length属性是 int ,所以当你得到i == int.MaxLength时循环将评估 i == splitted.Length并将转到i++这会溢出。

但是你的循环显示 i < splitted.Length这样i == splitted.Length 不会发生。

底线:我认为VCG发现了一条可疑的线,但没有什么可担心的。
希望这会有所帮助,祝您编码愉快。

关于c# - 无溢出检查的整数运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37710680/

相关文章:

c# - (高斯)滤波后归一化图像

c# - 如何将多个数据库值返回到文本框?

asp.net - 如何使按钮看起来像超链接 aspx.net

asp.net - 向 Gridview 添加复选框

asp.net - 在 App_Code 类中强制转换 ascx

asp.net-mvc - MVC 4 中的 ReportViewer 部分

c# - 单击后禁用按钮,直到使用 javascript 发回 ascx 控件

c# - 文本框中的自定义密码字符

c# - 选择每个产品的最后一个不可为空的项目?

jquery - 通过使用 jQuery 解析 sessionID 从 WCF 服务访问 session 变量