Трудно закодированный buffer size

Размер буфера памяти является численным значением вместо символьной константы

Описание

Трудно закодированный buffer size происходит, когда вы используете численное значение вместо символьной константы при объявлении буфера памяти, такого как массив.

Риск

Трудно закодированный buffer size вызывает следующие проблемы:

  • Трудно закодированный buffer size увеличивает вероятность ошибок и поэтому затрат на обслуживание. Если изменение политики требует, чтобы разработчики изменили buffer size, они должны изменить каждое вхождение buffer size в коде.

  • Тяжело-постоянные константы могут быть представлены нападению, если код раскрыт.

Фиксация

Используйте символьное имя вместо трудно закодированной константы для buffer size. Символьные имена включают const - квалифицированные переменные, константы enum или макросы.

Константы enum рекомендуются.

  • Макросы заменяются их постоянными значениями после предварительной обработки. Поэтому они могут представить контур цикла.

  • Константы enum известны во время компиляции. Поэтому компиляторы могут оптимизировать циклы более эффективно.

    const - квалифицированные переменные обычно известны во время выполнения.

Примеры

развернуть все

int table[100];

void read(int);

void func(void) {
    for (int i=0; i<100; i++)
        read(table[i]);
}

В этом примере размере массива трудно закодирован table.

Исправление — использует символьное имя

Одно возможное исправление должно заменить трудно закодированный размер на символьное имя.

const int MAX_1 = 100;        
#define MAX_2 100
enum { MAX_3 = 100 };

int table_1[MAX_1];
int table_2[MAX_2];
int table_3[MAX_3];

void read(int);

void func(void) {
    for (int i=0; i < MAX_1; i++)
        read(table_1[i]);
    for (int i=0; i < MAX_2; i++)
        read(table_2[i]);
    for (int i=0; i < MAX_3; i++)
        read(table_3[i]);
}

Информация о результате

Группа: Хорошая практика
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: HARD_CODED_BUFFER_SIZE
Влияние: низко
ID CWE: 547

Введенный в R2015b