Pulojekiti ya LLVM imapanga ma buffer otetezeka mu C ++

Omwe akupanga pulojekiti ya LLVM apereka zosintha zingapo zomwe cholinga chake ndi kulimbikitsa chitetezo cha mapulojekiti ofunikira kwambiri a C++ ndikupereka njira zothetsera zolakwika zomwe zimachitika chifukwa cha kuchuluka kwa ma buffers. Ntchitoyi ikuyang'ana mbali ziwiri: kupereka chitsanzo chachitukuko chomwe chimalola ntchito yotetezeka ndi ma buffers, ndikugwira ntchito kulimbikitsa chitetezo cha libc ++ laibulale ya ntchito.

Mtundu wotetezedwa wa C++ umaphatikizapo kugwiritsa ntchito makalasi operekedwa ndi laibulale wamba pogwira ntchito ndi ma buffer m'malo mogwiritsa ntchito zolozera. Mwachitsanzo, akuyenera kugwiritsa ntchito std::array, std::vector ndi std::span makalasi, omwe adzawonjezera cheke chanthawi yowerengera kukumbukira komwe kwaperekedwa mopitilira muyeso.

Pofuna kuthana ndi machitidwe owopsa a pulogalamu mu clang, akuyenera kuwonetsa machenjezo ophatikizira pamasamu onse a pointer, ofanana ndi machenjezo a clang-tidy linter mukamagwiritsa ntchito mbendera ya "cppcoreguidelines-pro-bounds-pointer-arithmetic", thandizo lomwe lingathandizire. kuwonekera mu LLVM 16 yotulutsidwa. Kuti mutsegule machenjezo otere, mbendera yosiyana idzawonjezedwa ku clang, osati yogwira ntchito mwachisawawa.

Ikukonzekera kukhazikitsa njira yolimbikitsira chitetezo mu libc++, yomwe, ikayatsidwa, imagwira zinthu zina panthawi yothamanga zomwe zimatsogolera kumayendedwe osadziwika. Mwachitsanzo, m'makalasi a std::span ndi std::vector, njira yolowera kunja imayang'aniridwa, ndipo ikazindikirika, pulogalamuyo idzawonongeka. Madivelopa akukhulupirira kuti kuwonjezera zosintha zotere kumapangitsa kuti libc ++ ikhale yogwirizana ndi C ++, popeza kusankha momwe mungachitire ndi machitidwe osadziwikiratu kumakhala ndi opanga laibulale, omwe, mwa zina, atha kuwona zomwe sizikudziwika ngati zolephera, zomwe zimafunikira pulogalamu yomaliza.

Macheke a Runtime mu libc++ akonzedwa kuti agawidwe m'magulu omwe angathe kuthandizidwa payekhapayekha. Macheke ena omwe akufunsidwa, omwe samatsogolera ku zovuta kwa magwiridwe antchito kapena kusintha kwa ABI, akhazikitsidwa kale mkati mwa njira yotetezeka ya libc ++.

Kuphatikiza apo, akukonzekera kukonzekera zida zosinthira ma code, kukulolani kuti musinthe zosinthika ndi zolozera zopanda kanthu ndi zotengera ndikugwiritsa ntchito zowongolera zina pomwe chidebe sichingalowe m'malo mwa cholozera (mwachitsanzo, "ngati(array_pointer)" kutembenuzidwa kukhala β€œngati(span.data) ()”). Zosintha zitha kugwiritsidwa ntchito osati pazosintha zakumaloko, komanso pamitundu yamitundu yolozera.

Source: opennet.ru

Kuwonjezera ndemanga