Анализатор обнаружил, что в буфер фиксированного размера копируется данные из небезопасного источника.
Примером такого источника могут послужить аргументы командной строки, длина которых неизвестна:
char *tmp = (char*)malloc(1024);
....
strcat(tmp, argv[0]);
В случае, когда размер копируемых данных превысит размер буфера, произойдёт его переполнение. Для того, чтобы избежать этого, лучше вычислить требуемый объём памяти заранее:
char *src = GetData();
char *tmp = (char*)malloc(strlen(src) + strlen(argv[0]) + 1);
....
strcpy(tmp, src);
strcat(tmp, argv[0]);
Также можно выделять память по мере необходимости, используя функцию realloc(). В C++ для работы со строками можно использовать классы, такие как std::string.
Анализатор не выдаст предупреждение в случаях, если источник данных неизвестен:
char *src = GetData();
char *tmp = malloc(1024);
....
strcat(tmp, src);
Данная диагностика классифицируется как:
|