Checklist
-
Environnement de développement:
- Utilisation de la chaîne d'outils stable (DENV-STABLE)
- Conservation des valeurs par défaut des variables critiques dans les profils cargo (DENV-CARGO-OPTS)
- Conservation des valeurs par défaut des variables d'environnement à l'exécution de cargo (DENV-CARGO-ENVVARS)
- Utilisation régulière d'un linter (DENV-LINTER)
- Utilisation d'un outil de formatage (rustfmt) (DENV-FORMAT)
- Vérification manuelle des réparations automatiques (DENV-AUTOFIX)
-
Bibliothèques:
- Vérification des dépendances obsolètes (cargo-outdated) (LIBS-OUTDATED)
- Vérification des vulnérabilités connues pour les dépendances (cargo-audit) (LIBS-AUDIT)
- Vérification du code unsafe dans les dépendances (LIBS-UNSAFE)
-
Généralités sur le langage:
- Respect des conventions de nommage (LANG-NAMING)
- Non-utilisation des blocs unsafe (LANG-UNSAFE)
- Utilisation des opérations arithmétiques appropriées au regard des potentiels dépassements (LANG-ARITH)
-
Mise en place d'un type
Error
personnalisé, pouvant contenir toutes les erreurs possibles (LANG-ERRWRAP) -
Utilisation de l'opérateur
?
et non-utilisation de la macrotry!
(LANG-ERRDO) -
Non-utilisation de fonctions qui peuvent causer des
panic
(LANG-NOPANIC) -
Test des indices d'accès aux tableaux ou utilisation de la méthode
get
(LANG-ARRINDEXING) -
Gestion correcte des
panic!
dans les FFI (LANG-FFIPANIC)
-
Gestion de la mémoire:
-
Non-utilisation de
forget
(MEM-FORGET) -
Utilisation du lint clippy pour détecter l'utilisation de
forget
(MEM-FORGET-LINT) - Absence de fuite mémoire (MEM-LEAK)
-
Libération des valeurs wrappées dans
ManuallyDrop
(MEM-MANUALLYDROP) -
Appel systématique à
from_raw
pour les valeurs créées avecinto_raw
(MEM-INTOFROMRAW) - Pas de mémoire non initialisée (MEM-UNINIT)
- Mise à zéro des données sensibles après utilisation (MEM-ZERO)
-
Non-utilisation de
-
Système de types:
-
Justification de l'implémentation du trait
Drop
(LANG-DROP) -
Absence de
panic
dans l'implémentation deDrop
(LANG-DROP-NO-PANIC) -
Absence de cycles de références avec valeurs
Drop
ables (LANG-DROP-NO-CYCLE) -
Sécurité assurée par d'autres mécanismes en plus du trait
Drop
(LANG-DROP-SEC) -
Justification de l'implémentation des traits
Send
etSync
(LANG-SYNC-TRAITS) - Respect des invariants des traits de comparaison standards (LANG-CMP-INV)
- Utilisation des implémentations par défaut des traits de comparaison standards (LANG-CMP-DEFAULTS)
- Dérivation des traits de comparaison lorsque c'est possible (LANG-CMP-DERIVE)
-
Justification de l'implémentation du trait
-
FFI:
- Utilisation exclusive de types compatibles avec le C dans les FFI (FFI-CTYPE)
- Utilisation de types cohérents pour les FFI (FFI-TCONS)
- Utilisation des outils de génération automatique de bindings (FFI-AUTOMATE)
-
Utilisation des alias portables
c_*
pour faire correspondre les types dépendants de la plateforme d'exécution (FFI-PFTYPE) - Non-vérification des valeurs de types non-robustes (FFI-CKNONROBUST)
- Vérification des valeurs externes en Rust (FFI-CKINRUST)
- Vérification des références provenant d'un langage externe (FFI-CKREF)
- Non-utilisation des types références et utilisation des types pointeurs (FFI-NOREF)
- Vérification des pointeurs externes (FFI-CKPTR)
-
Marquage des types de pointeurs de fonction dans les FFI comme
extern
etunsafe
(FFI-MARKEDFUNPTR) - Vérification des pointeurs de fonction provenant d'une FFI (FFI-CKFUNPTR)
-
Non-utilisation d'
enum
s Rust provenant de l'extérieur par une FFI (FFI-NOENUM) - Utilisation de types Rust dédiés pour les types opaques externes (FFI-R-OPAQUE)
-
Utilisation de pointeurs vers des
struct
s C/C++ pour rendre des types opaques (FFI-C-OPAQUE) -
Non-utilisation de types qui implémentent
Drop
dans des FFI (FFI-MEM-NODROP) - Identification du langage responsable de la libération des données dans les FFI (FFI-MEM-OWNER)
-
Encapsulation des données externes dans un type
Drop
(FFI-MEM-WRAPPING) -
Gestion correcte des
panic
s dans les FFI (FFI-NOPANIC) - Mise en place d'une encapsulation sûre pour les bibliothèques externes (FFI-SAFEWRAPPING)
- Exposition exclusive d'API dédiée et compatible avec le C (FFI-CAPI)