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