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 macro try! (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 avec into_raw (MEM-INTOFROMRAW)
    • Pas de mémoire non initialisée (MEM-UNINIT)
    • Mise à zéro des données sensibles après utilisation (MEM-ZERO)
  • Système de types:

    • Justification de l'implémentation du trait Drop (LANG-DROP)
    • Absence de panic dans l'implémentation de Drop (LANG-DROP-NO-PANIC)
    • Absence de cycles de références avec valeurs Dropables (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 et Sync (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)
  • 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 et unsafe (FFI-MARKEDFUNPTR)
    • Vérification des pointeurs de fonction provenant d'une FFI (FFI-CKFUNPTR)
    • Non-utilisation d'enums 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 structs 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 panics 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)