没有溢出检查的整数操作

时间:2016-06-08 18:54:55

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

您好,我刚刚对我的代码进行了静态代码分析,并且一直收到错误

  

"没有溢出检查的整数操作"

有人可以帮我解决这个问题,或者告诉我它究竟意味着什么。我已经尝试使用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>  

2 个答案:

答案 0 :(得分:1)

  

我已经尝试使用check关键字修复此问题

第一步是理解信息。随机代码更改它不是处理报告给您的可能错误的好方法。

这里没有可能的整数溢出。没有关于该工具的细节,很难说更多。

答案 1 :(得分:1)

您收到的消息表明您可能会在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,以便sudo rb-site install /var/www/reviewboard.mysite.com 不会发生

结论:我认为 VCG 发现了一条可疑线,但没有什么可担心的。
希望这有帮助,快乐编码。