mapbox / mapbox/cpp

Recommendations for which sanitizers to enable

Ouverte
#41 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Aucune donnée de langage
Étoiles
110
Forks
17
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

As time passes, the g++/clang++ gain more new sanitizers, existing ones get better, and some get ported to new platforms (e.g. recently leak support was added to OS X in clang++ 5).

Similar to #37 for warnings, This ticket can serve as a central place to start documenting a recommended list of sanitizer flags to use. I intend this to be a quick, opinionated reference to check before you would dive deeper into docs like https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html.

The relevant questions I see are:

- 🍇 Which sanitizers should we always test with?
- 🍊 Which additional flags or environment variables should we use?
- 🍏 Which additional flags should be used when testing the sanitizers on CI systems?
- 🍎 Which additional flags should be used when building sanitized binaries for live testing?

Refs:

- source of truth for which sanitizers are in which groupings:
- 4.x: https://github.com/llvm-mirror/clang/blob/release_40/include/clang/Basic/Sanitizers.def
- 5.x: https://github.com/llvm-mirror/clang/blob/release_50/include/clang/Basic/Sanitizers.def
- master: https://github.com/llvm-mirror/clang/blob/master/include/clang/Basic/Sanitizers.def
- Docs for HEAD llvm for sanitizers:
- Address: https://clang.llvm.org/docs/AddressSanitizer.html
- Thread: https://clang.llvm.org/docs/ThreadSanitizer.html
- Memory: https://clang.llvm.org/docs/MemorySanitizer.html
- UndefinedBehavior: https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
- DataFlow: https://clang.llvm.org/docs/DataFlowSanitizer.html
- Leak: https://clang.llvm.org/docs/LeakSanitizer.html
- Control Flow Integrity: https://clang.llvm.org/docs/ControlFlowIntegrity.html
- Safe Stack: https://clang.llvm.org/docs/SafeStack.html

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par comparer les regroupements de sanitizers dans les fichiers Sanitizers.def référencés avec la documentation de AddressSanitizer, ThreadSanitizer, MemorySanitizer, UndefinedBehaviorSanitizer, DataFlowSanitizer, LeakSanitizer, Control Flow Integrity et Safe Stack. Clarifiez les recommandations concernant les tests toujours activés, la CI et les builds de live-testing, y compris les flags, les variables d’environnement et les limites de plateforme pertinentes. Le travail est considéré comme terminé lorsque l’issue contient une référence concise et claire couvrant ces questions.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
cpp
Domaine
documentation, testing-qa
Type d'issue
Documentation
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.