
BUG OF THE MONTH | Possible negative index value
public void Apply3D(AudioListener listener, AudioEmitter emitter)
{
....
var i = FindVariable("Distance");
_variables[i].SetValue(distance);
....
var j = FindVariable("OrientationAngle");
_variables[j].SetValue(angle);
....
}
Предупреждение PVS-Studio: V3106 Possible negative index value. The value of ‘i’ index could reach -1. MonoGame.Framework.DesktopGL(netstandard2.0) Cue.cs 251
Анализатор сообщает о том, что переменная i, используемая в качестве индекса, может принимать значение -1.
Эта переменная инициализируется возвращаемым значением метода FindVariable. Посмотрим, что у него внутри:
private int FindVariable(string name)
{
// Do a simple linear search... which is fast
// for as little variables as most cues have.
for (var i = 0; i < _variables.Length; i++)
{
if (_variables[i].Name == name)
return i;
}
return -1;
}
Если в коллекции не удалось найти элемент с соответствующим значением свойства, то возвращённое значение будет равно -1. Очевидно, что использование отрицательного числа в качестве индекса приведёт к выбрасыванию исключения IndexOutOfRangeException.