Buffer overflow from incorrect string format specifier

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

Описание

Переполнение буфера от неправильного спецификатора формата строки происходит когда аргумент спецификатора формата для функций, таких как 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