Estoy siguiendo la presentación de la lección de seguridad Stanford CS155 para aprender sobre el desbordamiento de enteros. Hoy aprendí que la función memcpy () puede llevar a un desbordamiento. La presentación dice: Si tengo un código como el siguiente, la función segunda memcpy () puede desbordar el montón .
void func( char *buf1, *buf2, unsigned int len1, len2) {
char temp[256];
if (len1 + len2 > 256) {return -1} // length check
memcpy(temp, buf1, len1); // cat buffers
memcpy(temp+len1, buf2, len2);
do-something(temp); // do stuff
}
¿Cómo puedo prevenir el desbordamiento? ¿Qué debo cambiar en memcpy()
para que no cause un desbordamiento?