您好,我刚刚对我的代码进行了静态代码分析,并且一直收到错误
"没有溢出检查的整数操作"
有人可以帮我解决这个问题,或者告诉我它究竟意味着什么。我已经尝试使用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>
答案 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 发现了一条可疑线,但没有什么可担心的。
希望这有帮助,快乐编码。