Переполнение буфера кучи - это ложное срабатывание средства очистки адресов?
У меня есть следующая простая программа
void copy(const int16_t *buffer) {
int16_t *b;
memcpy(b,buffer,2);
return ;
}
int LLVMFuzzerTestOneInput(const int16_t *buffer) {
copy(buffer);
return 0;
}
который я компилирую с помощью clang (v9), используя флаги очистки адреса и фаззера следующим образом
clang -fsanitize=address,fuzzer -g test5.c
Когда я запускаю получившийся исполняемый файл, фаззер обнаруживает переполнение буфера кучи из-за неправильного чтения - в частности, при попытке скопировать второй байт в memcpy.
Я не могу понять, почему это ошибка. Есть объяснения? Заранее спасибо.
1 ответ
Поскольку b не инициализируется, когда вы запоминаете его, вы вызываете поведение undefined. Буквально "куда вы хотите скопировать эти данные?"
Дезинфицирующее средство подходит и делает вам большую услугу, указывая на эту проблему.
Для чего предназначена эта функция копирования?