# V6025. Possibly index is out of bound.

При доступе по индексу к переменной типа массив, список или строка может возникнуть исключение IndexOutOfBoundsException, если значение индекса оказывается за пределами допустимого диапазона. Анализатор способен обнаружить некоторые ошибки такого рода.

Например, это может произойти во время обхода массива в цикле:

    int[] buff = new int[25];
    for (int i = 0; i <= 25; i++)
      buff[i] = 10;

Нужно помнить о том, что первый элемент массива имеет индекс 0, а последний – на единицу меньше размера массива. Корректный вариант:

    int[] buff = new int[25];
    for (int i = 0; i < 25; i++)
      buff[i] = 10;

Похожую ошибку можно сделать не только в цикле, но и при неправильной проверке индекса в условии:

    void ProcessOperandTypes(int opCodeValue, byte operandType)
    {
      byte[] OneByteOperandTypes = new byte[0xff];
      if (opCodeValue < 0x100)
      {
        OneByteOperandTypes[opCodeValue] = operandType;
      }
      ...
    }

Корректный вариант:

    void ProcessOperandTypes(int opCodeValue, byte operandType)
    {
      byte[] OneByteOperandTypes = new byte[0xff];
      if (opCodeValue < 0xff)
      {
        OneByteOperandTypes[opCodeValue] = operandType;
      }
      ...
    }

Также можно допустить ошибку при доступе к конкретному элементу массива или списка.

    private Map<String, String> TransformListToMap(List<String> config)
    {
      Map<String, String> map = new HashMap<>();
      if (config.size() == 10)
      {
        map.put("Base State", config.get(0));
        ...
        map.put("Sorted Descending Header Style", config.get(10));
      }
      ...
      return map;
    }

В этом примере допущена ошибка в количестве записей в списке config. Исправленный вариант выглядит следующим образом:

    private Map<String, String> TransformListToMap(List<String> config)
    {
      Map<String, String> map = new HashMap<>();
      if (config.size() == 11)
      {
        map.put("Base State", config.get(0));
        ...
        map.put("Sorted Descending Header Style", config.get(10));
      }
      ...
      return map;
    }

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки переполнения буфера (записи или чтения за пределами выделенной для буфера памяти).

Данная диагностика классифицируется как:

CWE-125 CWE-787

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6025.