LLVM proiektuaren garatzaileek hainbat aldaketa proposatu dituzte misio kritikoko C++ proiektuen segurtasuna indartzera eta bufferen gainditzeek eragindako akatsak ezabatzeko bitartekoa eskaintzeko. Lana bi arlotan oinarritzen da: bufferekin lan segurua ahalbidetzen duen garapen eredu bat eskaintzea eta libc++ funtzioen liburutegi estandarraren segurtasuna indartzeko lan egitea.
C++rako proposatutako programazio eredu seguruak liburutegi estandarrak emandako klaseak erabiltzean datza bufferekin lan egitean erakusle hutsak manipulatu beharrean. Adibidez, std::array, std::vector eta std::span klaseak erabiltzea proposatzen da, gehiegi esleitutako memoriaren exekuzio-denbora egiaztatzea gehituko dutenak.
Clang-en programazio-praktika arriskutsuei aurre egiteko, erakusleen eragiketa aritmetiko guztietarako konpiladoreen abisuak bistaratzea proposatzen da, "cppcoreguidelines-pro-bounds-pointer-arithmetic" bandera erabiltzean clang-tidy linter warnings irteeraren antzera. LLVM 16 bertsioan agertzen dira. Halako abisuak gaitzeko, beste bandera bat gehituko da clang-era, lehenespenez aktibo ez dena.
Babes-modu hobetua aukerako bat ezartzea aurreikusi da libc++-n, eta, gaituta dagoenean, exekuzioan definitutako portaera ekartzen duten egoera batzuk harrapatuko ditu. Adibidez, std::span eta std::vector klaseetan, mugaz kanpoko memoria-sarbidea kontrolatuko da, eta detektatzen bada, programa huts egingo du. Garatzaileek uste dute aldaketa horiek gehitzeak libc++ C++ estandarrak beteko dituela, izan ere, definitu gabeko portaera kasuak nola kudeatu aukeratzea liburutegiko garatzaileei dagokie, eta hauek, besteak beste, definitu gabeko portaera hutsegite gisa trata dezakete, eta amaitzeko programa.
Libc++-en exekuzio-denbora egiaztatzeak banan-banan gaitu daitezkeen kategorietan banatzea aurreikusita dago. Proposatutako egiaztapen batzuk, eragiketen konplexutasunik edo ABI-n aldaketarik eragiten ez dutenak, dagoeneko libc++ modu seguruan inplementatuta daude.
Gainera, kodea doitzeko tresnak prestatzea aurreikusten da, aldagaiak erakusle hutsekin edukiontziekin ordezkatzeko eta kudeatzaile alternatiboak erabiltzeko aukera emanez, edukiontziak erakuslea zuzenean ordezkatu ezin duen egoeretan (adibidez, βif(array_pointer)β eraikuntzak. "if(span.data) ()") bihurtuko da). Doikuntzak aldagai lokaletan ez ezik, erakusle-moten parametroetan ere aplika daitezke.
Iturria: opennet.ru