Il progetto Curl ha eliminato l'uso della funzione strcpy nel codice

Daniel Stenberg, autore dello strumento per inviare e ricevere dati in rete curl, ha annunciato l'interruzione dell'uso della funzione strcpy() nel codice sorgente del progetto e il divieto di utilizzare questa funzione in futuro. Questa decisione è un seguito del rifiuto dell'uso della funzione strncpy(), che copia un numero specificato di byte da una stringa di input, avvenuto lo scorso anno. L'uso di strncpy() creava il rischio di errori a causa della possibile omissione del carattere nullo alla fine della stringa o dell'aggiunta di riempimenti con zeri.

Le chiamate a strncpy() sono state sostituite dalla funzione strcpy(), per la quale viene eseguita l'allocazione della memoria per il buffer di destinazione tenendo conto della dimensione della stringa di origine o viene effettuato un controllo di corrispondenza tra la dimensione della stringa di origine e il buffer di destinazione. Non è stata effettuata la sostituzione con la funzione strlcpy() poiché era necessario copiare sempre l'intera stringa o restituire un errore.

Ora tutte le chiamate a strcpy() sono state sostituite dalla nuova funzione curlx_strcopy(dest, dsize, src, slen). La funzione curlx_strcopy() richiede di specificare la dimensione dei buffer di origine e di destinazione, tenendo conto che il buffer di destinazione deve essere sempre maggiore di quello di origine per contenere il carattere nullo di fine stringa, che viene forzatamente aggiunto dalla funzione alla fine per evitare omissioni durante la copia. Se la dimensione del buffer di destinazione è maggiore di zero, ma insufficiente per copiare la stringa di destinazione, viene aggiunto un byte nullo all'inizio. 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 sostituzione di strcpy() con curlx_strcopy() è stata effettuata poiché esiste la possibilità di errore umano che porta alla separazione del codice con controlli / allocazione di memoria e chiamata a strcpy(), ad esempio, durante un trasferimento imprudente di solo una parte del codice o inserendo codice tra il controllo e la chiamata a strcpy(). Inoltre, l'abbandono dell'uso di strcpy consentirà di eliminare il flusso di messaggi falsi sulle vulnerabilità a causa di attivazioni errate degli strumenti AI, che considerano la presenza di strcpy() come una vulnerabilità senza tenere conto dei controlli già presenti nel codice.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster