Buffer overflow from incorrect string format specifier

Спецификатор строкового формата заставляет буферный аргумент стандартных библиотечных функций переполняться

Описание

Этот дефект возникает, когда аргумент спецификатора формата для таких функций, как sscanf приводит к переполнению или нижнему потоку в аргументе буфера памяти.

Риск

Если спецификатор формата задает точность, которая больше, чем buffer size памяти, происходит переполнение. Переполнения могут вызвать неожиданное поведение, такое как повреждение памяти.

Зафиксировать

Используйте спецификатор формата, который совместим с buffer size памяти.

Примеры

расширить все

#include <stdio.h>

void func (char *str[]) {
    char buf[32];
    sscanf(str[1], "%33c", buf);
}

В этом примере buf может содержать 32 char элементы. Поэтому спецификатор формата %33c вызывает переполнение буфера.

Коррекция - используйте меньшую точность в спецификаторе формата

Одной из возможных коррекций является чтение меньшего количества элементов в буфер.

#include <stdio.h>

void func (char *str[]) {
    char buf[32];
    sscanf(str[1], "%32c", buf);
}

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

Группа: Статическая память
Язык: C | C++
По умолчанию: On для рукописного кода, off для сгенерированного кода
Синтаксис командной строки: STR_FORMAT_BUFFER_OVERFLOW
Влияние: Высокий
ИДЕНТИФИКАТОР CWE: 124, 125, 126, 127
Введенный в R2015b