El projecte LLVM desenvolupa la gestió segura de la memòria intermèdia en C++

Els desenvolupadors del projecte LLVM han proposat una sèrie de canvis amb l'objectiu d'enfortir la seguretat dels projectes C++ crítics per a la missió i proporcionar un mitjà per eliminar els errors causats per l'excés de memòria intermèdia. El treball se centra en dues àrees: proporcionar un model de desenvolupament que us permeti treballar de manera segura amb buffers i treballar per reforçar la seguretat de la biblioteca estàndard de funcions libc++.

El model de programació segur proposat per a C++ és utilitzar les classes proporcionades per la biblioteca estàndard quan es treballa amb memòries en comptes de manipular punters nus. Per exemple, es proposa utilitzar les classes std::array, std::vector i std::span, que s'afegiran amb una comprovació en temps d'execució de la memòria assignada fora dels límits.

Per combatre les pràctiques de programació perilloses a clang, es proposa emetre advertències del compilador per a totes les operacions aritmètiques de punter, similars als avisos de linter de clang-tidy quan s'utilitza el senyalador "cppcoreguidelines-pro-bounds-pointer-arithmetic", el suport per al qual apareixerà a la versió LLVM 16. Per habilitar aquests avisos, s'afegirà un senyalador separat a clang, que no està actiu per defecte.

Es preveu implementar un mode de protecció endurit opcional a libc++, que, quan estigui habilitat, detectarà algunes situacions que condueixen a un comportament no definit en temps d'execució. Per exemple, a les classes std::span i std::vector, es controlarà un accés fora dels límits, en aquest cas el programa es bloquejarà. Els desenvolupadors creuen que afegir aquests canvis mantindrà libc++ compatible amb els estàndards C++, ja que l'elecció de com gestionar els casos de comportament no definit correspon als desenvolupadors de la biblioteca, que poden, entre altres coses, interpretar el comportament no definit com un error que requereix el programa per sortir.

Es preveu que les comprovacions en temps d'execució a libc++ es divideixin en categories que es poden incloure individualment. Algunes de les comprovacions suggerides que no donen lloc a operacions més complexes o canvis a l'ABI ja estan implementades en el mode segur de libc++.

A més, està previst preparar un conjunt d'eines per corregir el codi, que us permetrà substituir variables amb punters nus als contenidors i aplicar controladors alternatius en situacions en què el contenidor no pot substituir directament el punter (per exemple, el "if (array_pointer)" La construcció es pot convertir a "if (span.data ()"). Els ajustos es poden aplicar no només a les variables locals, sinó també als paràmetres de tipus amb punters.

Font: opennet.ru

Afegeix comentari