Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Checklist

  • Environnement de développement:

    • Règle - Utilisation de la chaîne d'outils stable (DENV-STABLE)
    • Rule - Utilisation exclusive du tier 1 de rustc pour les logiciels de sûreté critiques (DENV-TIERS)
    • Règle - Mise en dépôt du fichier Cargo.lock (DENV-CARGO-LOCK)
    • Règle - Conservation des valeurs par défaut des variables critiques dans les profils cargo (DENV-CARGO-OPTS)
    • Règle - Conservation des valeurs par défaut des variables d'environnement à l'exécution de cargo (DENV-CARGO-ENVVARS)
    • Recommandation - Utilisation d'un outil de formatage (rustfmt) (DENV-FORMAT)
    • Règle - Utilisation régulière d'un linter (DENV-LINTER)
    • Règle - Vérification manuelle des réparations automatiques (DENV-AUTOFIX)
  • Bibliothèques:

    • Règle - Validation des dépendances tierces directes (LIBS-VETTING-DIRECT)
    • Recommandation - Validation des dépendances tierces transitives (LIBS-VETTING-TRANSITIVE)
    • Règle - Vérification des dépendances obsolètes (cargo-outdated) (LIBS-OUTDATED)
    • Règle - Vérification des vulnérabilités connues pour les dépendances (cargo-audit) (LIBS-AUDIT)
  • Nommage:

    • Règle - Respect des conventions de nommage (LANG-NAMING)
  • Gestion des entiers:

    • Règle - Utilisation des opérations arithmétiques appropriées au regard des potentiels dépassements (LANG-ARITH)
  • Gestion des erreurs:

    • Recommandation - Mise en place d'un type Error personnalisé pouvant contenir toutes les erreurs possibles (LANG-ERRWRAP)
    • Règle - Non-utilisation de fonctions qui peuvent causer des panic (LANG-NOPANIC)
    • Règle - Test des indices d'accès aux tableaux ou utilisation de la méthode get (LANG-ARRINDEXING)
    • Règle - Gestion correcte des panic! dans les FFI (LANG-FFIPANIC)
  • Généralités:

    • Règle - Interdiction des comportements non définis (UNSAFE-NOUB)
    • Règle - Non-utilisation des blocs unsafe (LANG-UNSAFE)
    • Règle - Encapsulation des fonctionnalités unsafe (LANG-UNSAFE-ENCP)
  • Gestion de la mémoire:

    • Règle - Non-utilisation de forget (MEM-FORGET)
    • Recommandation - Utilisation du lint clippy pour détecter l'utilisation de forget (MEM-FORGET-LINT)
    • Règle - Non-utilisation de Box::leak (MEM-LEAK)
    • Règle - Libération des valeurs wrappées dans ManuallyDrop (MEM-MANUALLYDROP)
    • Règle - Pas de conversion en pointeur raw en Rust non-usafe (MEM-NORAWPOINTER)
    • Règle - Appel systématique à from_raw pour les valeurs créées avec into_raw (MEM-INTOFROMRAWALWAYS)
    • Règle - Appel de from_raw uniquement pour les valeurs issues de into_raw (MEM-INTOFROMRAWONLY)
    • Règle - Pas de mémoire non initialisée (MEM-UNINIT)
    • Règle - Éviter les références comptées récursives mutables (MEM-MUT-REC-RC)
  • FFI:

    • Recommandation - Mise en place d'une encapsulation sûre pour les bibliothèques externes (FFI-SAFEWRAPPING)
    • Règle - Utilisation exclusive de types compatibles avec le C dans les FFI (FFI-CTYPE)
    • Règle - Utilisation de types cohérents pour les FFI (FFI-TCONS)
    • Recommandation - Utilisation des outils de génération automatique de bindings (FFI-AUTOMATE)
    • Règle - Utilisation des alias portables c_* pour faire correspondre les types dépendants de la plateforme d'exécution (FFI-PFTYPE)
    • Règle - Vérification des valeurs de types non-robustes (FFI-CKNONROBUST)
    • Recommandation - Vérification des valeurs externes en Rust (FFI-CKINRUST)
    • Règle - Vérification des références provenant d'un langage externe (FFI-CKREF)
    • Règle - Non-utilisation des types références au profit des types pointeurs à la frontière avec un langage externe (FFI-NOREF)
    • Règle - Vérification des pointeurs externes (FFI-CKPTR)
    • Règle - Marquage des types de pointeurs de fonction dans les FFI comme extern et unsafe (FFI-MARKEDFUNPTR)
    • Règle - Vérification des pointeurs de fonction provenant d'une FFI (FFI-CKFUNPTR)
    • Règle - Non-utilisation d'enums Rust provenant de l'extérieur par une FFI (FFI-NOENUM)
    • Recommandation - Utilisation de types Rust dédiés pour les types opaques externes (FFI-R-OPAQUE)
    • Recommandation - Utilisation de pointeurs vers des structs C/C++ pour rendre des types opaques (FFI-C-OPAQUE)
    • Règle - Non-utilisation de types qui implémentent Drop dans des FFI (FFI-MEM-NODROP)
    • Règle - Identification du langage responsable de la libération des données dans les FFI (FFI-MEM-OWNER)
    • Recommandation - Encapsulation des données externes dans un type Drop (FFI-MEM-WRAPPING)
    • Règle - Gestion correcte des panics dans les FFI (FFI-NOPANIC)
    • Règle - Exposition exclusive d'API dédiée et compatible avec le C (FFI-CAPI)
  • Bibliothèque standard:

    • Règle - Justification de l'implémentation des traits Send et Sync (LANG-SYNC-TRAITS)
    • Règle - Respect des invariants des traits de comparaison standards (LANG-CMP-INV)
    • Recommandation - Utilisation des implémentations par défaut des traits de comparaison standards (LANG-CMP-DEFAULTS)
    • Recommandation - Dérivation des traits de comparaison lorsque c'est possible (LANG-CMP-DERIVE)
    • Règle - Justification de l'implémentation du trait Drop (LANG-DROP)
    • Règle - Absence de panic dans l'implémentation de Drop (LANG-DROP-NO-PANIC)
    • Règle - Absence de cycles de références avec valeurs Dropables (LANG-DROP-NO-CYCLE)
    • Règle - Sécurité assurée par d'autres mécanismes en plus du trait Drop (LANG-DROP-SEC)