El proyecto Curl ha eliminado el uso de la función strcpy en su código

Daniel Stenberg, autor de la herramienta para enviar y recibir datos a través de la red curl, ha anunciado la eliminación de la función strcpy() del código del proyecto y la prohibición de su uso en el futuro. Esta decisión es una continuación del abandono del uso de la función strncpy() el año pasado, la cual copia un número específico de bytes de la cadena de entrada. El uso de strncpy() generaba el riesgo de errores debido a la omisión del carácter nulo al final de la cadena o un posible relleno con ceros.

Las llamadas a strncpy() han sido reemplazadas por la función strcpy(), que antes de su invocación incluía la asignación de memoria para el búfer de destino teniendo en cuenta el tamaño de la cadena de entrada o se verificaba la correspondencia entre el tamaño de la cadena de entrada y el búfer de destino. No se realizó la sustitución por strlcpy() ya que siempre era necesario copiar toda la cadena completa o devolver un error.

Ahora todas las llamadas a strcpy() han sido sustituidas por una nueva función curlx_strcopy(dest, dsize, src, slen). La función curlx_strcopy() requiere especificar el tamaño de los búferes de origen y destino, teniendo en cuenta que el búfer de destino debe ser siempre mayor que el de origen para acomodar el carácter nulo al final de la cadena, el cual se añade forzosamente por la función al final para evitar que se omita durante la copia. Si el tamaño del búfer de destino es mayor que cero, pero no es suficiente para copiar la cadena deseada, se agrega un byte nulo al inicio. void curlx_strcopy(char *dest, size_t dsize, const char *src, size_t slen) { DEBUGASSERT(slen < dsize); if(slen < dsize) { memcpy(dest, src, slen); dest[slen] = 0; } else if(dsize) dest[0] = 0; }

La sustitución de strcpy() por curlx_strcopy() se ha llevado a cabo debido a la posibilidad de error humano, lo que podría llevar a una separación del código donde se verifica/asigna memoria y la llamada a strcpy(), por ejemplo, al trasladar descuidadamente solo una parte del código o al insertar código entre la verificación y la llamada a strcpy(). Además, la eliminación de strcpy permitirá deshacerse de una serie de falsos mensajes de vulnerabilidades debido a la detección incorrecta por herramientas de IA, que consideran la existencia de strcpy() como una vulnerabilidad sin tener en cuenta las verificaciones presentes en el código.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster