Memory Access Violation
// This program has been carefully crafted to serve
// a certain purpose:
// 1. It has a memory access violation.
// 2. It does not have any other construct that
// qualifies for a compiler warning.
// 3. Function process_names() is a quite convincing
// situation that tries to mimic a real life proc.
// 4. No headers included to minimize static analyzer
// reports.
// 5. It is written in C++03, so that an old static
// analyzer can deal with it.
// mock structure to represent a processed file contents
struct Names
{
const char * list[3];
};
// mock string class
// It does not check for a null pointer before
// the 1st dereference.
struct MyString
{
char str [64];
MyString(const char * s)
: str() // zero-initialize the array
{
for (int i = 0 ; *s != 0 ; ++s)
str[i++] = *s;
}
};
typedef MyString String;
// mock logging statement
void log(String const& /*filename*/, const char * /*val*/) {}
// mock file parser
Names parse_file (String const& filename)
{
Names ans;
(void)filename; // mock opening of a file
ans.list[0] = "A";
ans.list[1] = "B";
ans.list[2] = "C";
return ans;
}
// the function with the bug
void process_names()
{
const char * foundName = 0;
const char * fileName = "contents.txt";
Names names = parse_file(foundName);
foundName = names.list[1]; // mock search
log(fileName, foundName);
}
int main()
{
process_names();
}
Like this:
Like Loading...