MonoGame

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.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.