V755. Copying from unsafe data source. Buffer overflow is possible.


Анализатор обнаружил, что в буфер фиксированного размера копируется данные из небезопасного источника.

Примером такого источника могут послужить аргументы командной строки, длина которых неизвестна:

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);
   

Согласно Common Weakness Enumeration, потенциальные ошибки, найденные с помощью этой диагностики, классифицируются как CWE-123.


Найденные ошибки

Проверено проектов
363
Собрано ошибок
13 495

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;