Переполнение буфера от неправильного спецификатора формата строки

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

Описание

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

Риск

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

Фиксация

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

Примеры

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

#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++
Значение по умолчанию: на
Синтаксис командной строки: STR_FORMAT_BUFFER_OVERFLOW
Влияние: высоко
ID CWE: 124, 125, 126, 127

Введенный в R2015b