Destination buffer underflow in string manipulation

Функция пишет, чтобы буферизовать при отрицательном смещении с начала буфера

Описание

Этот дефект происходит, когда определенные функции обработки строк пишут в свой целевой буферный аргумент при отрицательном смещении с начала буфера.

Например, для функционального sprintf(char* buffer, const char* format), вы получаете buffer от операции buffer = (char*)arr; ... buffer += offset;. arr массив и offset отрицательная величина.

Риск

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

Фиксация

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

Примеры

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

#include <stdio.h>
#define offset -2

void func(void) {
    char buffer[20];
    char *fmt_string ="Text";

    sprintf(&buffer[offset], fmt_string);     
}

В этом примере, &buffer[offset] при отрицательном смещении из памяти, выделенной buffer.

Коррекция — указатель изменения Decrementer

Одна возможная коррекция должна изменить значение offset.

#include <stdio.h>
#define offset 2

void func(void) {
    char buffer[20];
    char *fmt_string ="Text";

    sprintf(&buffer[offset], fmt_string);     
}

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

Группа: Статическая память
Язык: C | C++
Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода
Синтаксис командной строки: STRLIB_BUFFER_UNDERFLOW
Удар: высоко
ID CWE: 124, 786, 787
Введенный в R2015b