Le projet Curl a éliminé l'utilisation de la fonction strcpy dans le code.

Daniel Stenberg, auteur de l'outil pour obtenir et envoyer des données sur le réseau curl, a annoncé l'abandon de l'utilisation de la fonction strcpy() dans la base de code du projet et l'interdiction de son utilisation à l'avenir. Cette décision fait suite à l'abandon initié l'année dernière de la fonction strncpy(), qui copie un certain nombre d'octets de la chaîne d'entrée. L'utilisation de strncpy() présentait un risque d'erreurs en raison de l'omission du caractère nul à la fin de la chaîne ou d'un remplissage excessif par des zéros.

Les appels à strncpy() ont été remplacés par la fonction strcpy(), avant laquelle une allocation de mémoire pour le tampon de destination était effectuée en tenant compte de la taille de la chaîne d'origine ou une vérification était faite pour comparer la taille de la chaîne d'entrée et celle du tampon de destination. Le remplacement par la fonction strlcpy() n'a pas été effectué, car il était toujours nécessaire de copier toute la chaîne dans son intégralité ou de renvoyer une erreur.

Tous les appels à strcpy() ont maintenant été remplacés par la nouvelle fonction curlx_strcopy(dest, dsize, src, slen). La fonction curlx_strcopy() nécessite que la taille des tampons source et destination soit indiquée en tenant compte du fait que le tampon de destination doit absolument être plus grand que l'original pour contenir le caractère nul de fin de chaîne, qui est ajouté de force par la fonction à la fin pour éviter son omission lors de la copie. Si la taille du tampon de destination est supérieure à zéro, mais insuffisante pour copier la chaîne cible, un octet nul est ajouté au début. 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; }

Le remplacement de strcpy() par curlx_strcopy() a été effectué car il existe un risque d'erreur humaine conduisant à une séparation du code avec vérification/allocation de mémoire et appel à strcpy(), par exemple lors du déplacement inconsidéré d'une partie du code ou de l'insertion de code entre la vérification et l'appel de strcpy(). De plus, l'abandon de strcpy permettra d'éliminer le flux de faux rapports d'attaques dus à de fausses détections par des outils d'IA, qui considèrent la présence de strcpy() comme une vulnérabilité sans tenir compte des vérifications présentes dans le code.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster