Hard-coded 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
Влияние: Низкое
ИДЕНТИФИКАТОР CWE: 547
Введенный в R2015b