/* TEMPLATE GENERATED TESTCASE FILE Filename: CWE122_Heap_Based_Buffer_Overflow__CWE131_loop_01.c Label Definition File: CWE122_Heap_Based_Buffer_Overflow__CWE131.label.xml Template File: sources-sink-01.tmpl.c */ /* * @description * CWE: 122 Heap Based Buffer Overflow * BadSource: Allocate memory without using sizeof(int) * GoodSource: Allocate memory using sizeof(int) * Sink: loop * BadSink : Copy array to data using a loop * Flow Variant: 01 Baseline * * */ #include "std_testcase.h" #ifndef OMITBAD void CWE122_Heap_Based_Buffer_Overflow__CWE131_loop_01_bad() { int * data; data = NULL; /* FLAW: Allocate memory without using sizeof(int) */ data = (int *)malloc(10); if (data == NULL) {exit(-1);} { int source[10] = {0}; size_t i; /* POTENTIAL FLAW: Possible buffer overflow if data was not allocated correctly in the source */ for (i = 0; i < 10; i++) { data[i] = source[i]; } printIntLine(data[0]); free(data); } } #endif /* OMITBAD */ #ifndef OMITGOOD /* goodG2B uses the GoodSource with the BadSink */ static void goodG2B() { int * data; data = NULL; /* FIX: Allocate memory using sizeof(int) */ data = (int *)malloc(10*sizeof(int)); if (data == NULL) {exit(-1);} { int source[10] = {0}; size_t i; /* POTENTIAL FLAW: Possible buffer overflow if data was not allocated correctly in the source */ for (i = 0; i < 10; i++) { data[i] = source[i]; } printIntLine(data[0]); free(data); } } void CWE122_Heap_Based_Buffer_Overflow__CWE131_loop_01_good() { goodG2B(); } #endif /* OMITGOOD */ /* Below is the main(). It is only used when building this testcase on * its own for testing or for building a binary to use in testing binary * analysis tools. It is not used when compiling all the testcases as one * application, which is how source code analysis tools are tested. */ #ifdef INCLUDEMAIN int main(int argc, char * argv[]) { /* seed randomness */ srand( (unsigned)time(NULL) ); #ifndef OMITGOOD printLine("Calling good()..."); CWE122_Heap_Based_Buffer_Overflow__CWE131_loop_01_good(); printLine("Finished good()"); #endif /* OMITGOOD */ #ifndef OMITBAD printLine("Calling bad()..."); CWE122_Heap_Based_Buffer_Overflow__CWE131_loop_01_bad(); printLine("Finished bad()"); #endif /* OMITBAD */ return 0; } #endif