Обычный старый strcpy запрещен к использованию в стандарте кодирования нашей компании из-за его потенциальной возможности переполнения буфера. Я искал источник для какой-то сторонней библиотеки, на которую мы ссылаемся в нашем коде. Исходный код библиотеки использует strcpy, например:
for (int i = 0; i < newArgc; i++)
{
newArgv[i] = new char[strlen(argv[i]) + 1];
strcpy(newArgv[i], argv[i]);
}
Поскольку strlen используется при выделении памяти для буфера для копирования, это выглядит хорошо. Есть ли какой-нибудь возможный способ использовать этот нормальный strcpy, или это безопасно, как мне кажется?
Я видел наивные использования strcpy, которые приводят к ситуациям переполнения буфера, но, похоже, этого не происходит, поскольку он всегда выделяет нужное количество места для буфера с использованием strlen, а затем копирует в этот буфер с помощью argv [ ] как источник, который всегда должен заканчиваться нулем.
Мне, честно говоря, любопытно, может ли кто-то запустить этот код с отладчиком, чтобы использовать это или есть какие-то другие тактики, которые кто-то пытается взломать наш двоичный файл (с этим источником библиотеки, на который мы ссылаемся в его скомпилированной версии), мог бы использовать для использовать это использование strcpy. Спасибо за ваш вклад и опыт.