Plusieurs chemins d'erreur d'authentification font raise X(...) from None à l'intérieur d'un except Exception as exc. from None positionne __suppress_context__ mais ne supprime pasexc : l'exception brute reste accessible via X.__context__.
Vérifié empiriquement avec un PIN sentinelle injecté dans une exception de login : nouvelle_exception.__context__ contient l'exception brute porteuse du sentinelle, alors que str(exc), les logs et le traceback formaté sont bien expurgés.
Impact
Contredit la règle d'AGENTS.md (« Ne jamais conserver comme __cause__ ou __context__ une exception externe brute susceptible de contenir un secret »). Un __context__ porteur de secret peut fuiter dans tout formatage qui n'honore pas __suppress_context__.
Correctif attendu
Neutraliser le contexte : construire et lever l'exception hors du bloc except, ou remettre explicitement __context__ = None sur l'exception levée.
Tests de non-fuite couvrant messages, logs, __cause__, __context__ et traceback complet.
Mettre à jour la consigne AGENTS.md : from None seul est insuffisant.
Contexte
Découvert pendant la revue de PR #37. Le code suit un pattern préexistant du dépôt : le traitement doit être systémique, pas limité à cette PR.
## Constat
Plusieurs chemins d'erreur d'authentification font `raise X(...) from None` à l'intérieur d'un `except Exception as exc`. `from None` positionne `__suppress_context__` mais **ne supprime pas** `exc` : l'exception brute reste accessible via `X.__context__`.
Vérifié empiriquement avec un PIN sentinelle injecté dans une exception de login : `nouvelle_exception.__context__` contient l'exception brute porteuse du sentinelle, alors que `str(exc)`, les logs et le traceback formaté sont bien expurgés.
## Impact
Contredit la règle d'`AGENTS.md` (« Ne jamais conserver comme `__cause__` ou `__context__` une exception externe brute susceptible de contenir un secret »). Un `__context__` porteur de secret peut fuiter dans tout formatage qui n'honore pas `__suppress_context__`.
## Correctif attendu
- Neutraliser le contexte : construire et lever l'exception hors du bloc `except`, ou remettre explicitement `__context__ = None` sur l'exception levée.
- Tests de non-fuite couvrant messages, logs, `__cause__`, `__context__` et traceback complet.
- Mettre à jour la consigne `AGENTS.md` : `from None` seul est insuffisant.
## Contexte
Découvert pendant la revue de PR #37. Le code suit un pattern préexistant du dépôt : le traitement doit être systémique, pas limité à cette PR.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Constat
Plusieurs chemins d'erreur d'authentification font
raise X(...) from Noneà l'intérieur d'unexcept Exception as exc.from Nonepositionne__suppress_context__mais ne supprime pasexc: l'exception brute reste accessible viaX.__context__.Vérifié empiriquement avec un PIN sentinelle injecté dans une exception de login :
nouvelle_exception.__context__contient l'exception brute porteuse du sentinelle, alors questr(exc), les logs et le traceback formaté sont bien expurgés.Impact
Contredit la règle d'
AGENTS.md(« Ne jamais conserver comme__cause__ou__context__une exception externe brute susceptible de contenir un secret »). Un__context__porteur de secret peut fuiter dans tout formatage qui n'honore pas__suppress_context__.Correctif attendu
except, ou remettre explicitement__context__ = Nonesur l'exception levée.__cause__,__context__et traceback complet.AGENTS.md:from Noneseul est insuffisant.Contexte
Découvert pendant la revue de PR #37. Le code suit un pattern préexistant du dépôt : le traitement doit être systémique, pas limité à cette PR.