Как создать единичный тестовый пример в c для переполнения буфера, который не вызывает ошибку памяти, такую как segfault?Создание тестового примера для ошибки переполнения буфера (C/C++)
I.e. Учитывая простой переполнение буфера, например
int function() {
int exampleArray[10];
exampleArray[10] = 5;
return 0;
}
Как создать единичный тест для этого кода? Очевидно, есть ошибка, мы пишем прошлый конец массива. Однако вы можете запустить такую функцию без каких-либо доказательств ошибки.
Примечание: Мне нужно иметь возможность создавать тестовые примеры, когда указатель на массив поставляется во время выполнения пользователем, а также в упрощенном случае.
На управляемом языке, таком как Java, код генерирует исключение (ArrayIndexOutOfBoundsException), которое может быть обнаружено. Поэтому создание тестового примера является простым (блок try-catch для исключения).
Как можно было бы создать такой тест в c? Может ли какая-либо из модулей тестирования модулей для C справиться с такой ситуацией?
Справочная информация: Я пытаюсь создать автоматическое создание тестового примера. Я знаю, где ошибки, и хотел бы иметь возможность создать единичный тест для сбоев в этих ошибках.
Однако у меня не было бы ни малейшего представления о том, как создать тестовый сценарий, который не подходит для ошибки переполнения буфера, которая не приводит к сбою приложения.
Это решение будет работать хорошо для всех связанных кучи переполнение буфера. Мне не нужно беспокоиться о том, чтобы отслеживать каждую переменную, поскольку я уже знаю, какие переменные задействованы в переполнении буфера (уже определенные посредством статического анализа кода). Есть ли способ обработать простейший случай, когда переполненный массив находится в стеке? Благодарим за помощь :) – tPP
@tpp -Это приносит нам два вопроса. 1) Просмотрен ли код? Потому что, если вы не передаете какую-либо переменную функции, и она терпит неудачу, вам нужно нажать эту точку путем повторного тестирования. 2) Знаете ли вы, какую переменную вы хотите проверить для переполнения? –
1) Нет кода не рассматривается. 2) Я знаю переменную, которую я хочу проверить для переполнения. И я знаю, что переменная действительно переполнена. Я просто не знаю, как создать тестовый пример, если переменная находится в стеке. Благодарю. – tPP