U prughjettu LLVM sviluppa una gestione sicura di buffer in C++

I sviluppatori di u prughjettu LLVM anu prupostu una quantità di cambiamenti destinati à rinfurzà a sicurità di i prughjetti C++ critichi per a missione è furnisce un mezzu per eliminà l'errori causati da i buffer overruns. U travagliu hè focu annantu à dui spazii: furnisce un mudellu di sviluppu chì vi permette di travaglià in modu sicuru cù i buffers, è travagliendu per rinfurzà a sicurità di a libreria standard libc++ di funzioni.

U mudellu di prugrammazione sicura pruposta per C ++ hè di utilizà e classi furnite da a biblioteca standard quandu travaglia cù buffer invece di manipulà punters nudi. Per esempiu, hè prupostu d'utilizà e classi std::array, std::vector è std::span, chì saranu aghjunte cù una verificazione di run-time per a memoria allocata fora di i limiti.

Per cumbatte pratichi di prugrammazione periculosi in clang, hè prupostu di emette avvisi di compilatore per tutte l'operazioni aritmetiche di puntatore, simili à l'avvisi di linter di clang-tidy quandu si usa a bandiera "cppcoreguidelines-pro-bounds-pointer-arithmetic", supportu per quale apparirà in a liberazione LLVM 16. Per attivà tali avvisi, una bandiera separata serà aghjuntu à clang, chì ùn hè micca attivu per automaticamente.

Hè previstu di implementà un modu opzionale di prutezzione indurita in libc ++, chì, quandu hè attivatu, catturà alcune situazioni chì portanu à un cumpurtamentu indefinitu à u tempu di esecuzione. Per esempiu, in i classi std::span è std::vector, un accessu fora di i limiti serà monitoratu, in quale casu, u prugramma s'incridirà. I sviluppatori credenu chì l'aghjunzione di tali cambiamenti mantene a libc++ in cunfurmità cù i standard C++, postu chì l'scelta di cumu trattà i casi di cumportamentu indefinitu hè di i sviluppatori di a biblioteca, chì ponu, frà altre cose, interpretà un cumpurtamentu indefinitu cum'è un crash chì richiede u prugramma per esce.

I cuntrolli di runtime in libc++ sò previsti per esse divisi in categurie chì ponu esse inclusi individualmente. Alcune di i cuntrolli suggeriti chì ùn anu micca risultatu in operazioni più cumplesse o cambiamenti ABI sò digià implementati in u modu sicuru di libc++.

Inoltre, hè previstu di preparà un toolkit per correggerà u codice, chì vi permette di rimpiazzà e variàbili cù puntatori nudi nantu à i cuntenituri è applicà manipulatori alternativi in ​​situazioni induve u cuntinuu ùn pò micca rimpiazzà direttamente u puntatore (per esempiu, u "se (array_pointer)" custruzzione pò esse cunvertita in "se (span.data ()"). L'aghjustamenti ponu esse appiicati micca solu à variàbili lucali, ma ancu à i paràmetri di tipu cù punters.

Source: opennet.ru

Add a comment