C и статический анализ кода: это безопаснее, чем memcpy? - PullRequest
1 голос
/ 19 марта 2019

Является ли следующая функция более безопасной, чем использование memcpy?Memcpy выдает следующую ошибку «Improper_Null_Termination» в статическом анализе кода Checkmarx: Строка в строке удаляется из завершающего нулевого байта в at.Однако, если я использую следующую функцию, Checkmarx не имеет проблем:

void myMemCpy(void *dest, void *src, size_t n) 
{ 
   // Typecast src and dest addresses to (char *) 
   char *csrc = (char *)src; 
   char *cdest = (char *)dest; 

   // Copy contents of src[] to dest[] 
   for (int i=0; i<n; i++) 
       cdest[i] = csrc[i]; 
} 

Есть ли проблемы с использованием этой функции вместо memcpy ()?

1 Ответ

5 голосов
/ 19 марта 2019

Является ли следующая функция более безопасной, чем использование memcpy?

Нет.Это то же самое.В лучшем случае.

Во всяком случае, поскольку анализаторы кода и компиляторы знают, что делает memcpy(), этот код менее безопасен.

Особенно с учетом того, как вы проходите size_t а затем неправильно использовать счетчик циклов int:

void myMemCpy(void *dest, void *src, size_t n) 
{ 
   // Typecast src and dest addresses to (char *) 
   char *csrc = (char *)src; 
   char *cdest = (char *)dest; 

   // Copy contents of src[] to dest[] 
   for (int i=0; i<n; i++) 
       cdest[i] = csrc[i]; 
} 

В 64-битной архитектуре с 32-битной int и 64-битной size_t, это будет впечатляющим сбоем, если n это значение более 2 гигов.

...