创建缓冲区溢出错误的测试用例(C/c ++)

tPP*_*tPP 6 c automated-tests unit-testing

如何在c中创建一个单元测试用例,用于缓冲区溢出,不会导致内存错误,例如段错误?

即给出一个简单的缓冲区溢出,例如

int function () {
    int exampleArray[10];
    exampleArray[10] = 5;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如何为此代码创建单元测试?显然有一个错误,我们正在编写一个数组的末尾.但是,您可以在没有任何错误证据的情况下运行此类函数.

注意:我需要能够为用户在运行时提供数组索引以及上述简化案例时创建测试用例.

在像Java这样的托管语言中,代码将抛出一个可以捕获的异常(ArrayIndexOutOfBoundsException).因此,创建一个测试用例很简单(例外的try-catch块).

如何在c中创建这样的测试?C的任何单元测试框架都可以处理这种情况吗?

背景信息:我正在尝试自动生成测试用例.我知道错误在哪里,并希望能够创建一个单元测试来对这些错误进行失败.

但是,我不知道如何创建一个测试用例,该测试用例因缓冲区溢出错误而无法使应用程序崩溃.

Pra*_*n S 4

一种检查方法是如果您使用堆,则在缓冲区之前和之后分配额外的字节。但跟踪每个变量是很困难的。函数结束后,您可以检查这些缓冲区中的数据是否被修改。您必须创建一个单独的库来为您保存这些值。

或者检查此链接。希望它能为您提供有关缓冲区溢出测试的更多信息。

编辑:更多信息:

  1. 测试不接受任何输入的 API 是很困难的,或者说不是你的工作。但是,如果 API 接受的输入将在执行过程中被操纵,那么您可以传递可能导致溢出的值。

    void foo()
    {

    char buffer [5];
    
    
     strcpy(buffer, "StackOverflow");
    
    // Clearly overflow. Has to be found out in Code reviews or static analysis
    
    
    }
    
    Run Code Online (Sandbox Code Playgroud)