Grain: LIGHT/guard -- lane myia-ai-01:CoursIA
Constat
scripts/ci/check_secret_paths_ignored.py (#17442), fonction verdict_chemin, classe un chemin désignoré par un motif de négation comme VERSIONNEE, c'est-à-dire protégé.
Git le permet sans erreur : git check-ignore -v --no-index rend rc=0 quand la règle gagnante est une négation. Mesure sur un dépôt neuf dont le .gitignore contient versionne/* puis !versionne/visible.env :
rc 0 '.gitignore:2:!versionne/visible.env\tversionne/visible.env\n'
verdict_chemin teste returncode == 1 and not stdout pour conclure NON_IGNORE. Ce cas passe donc à côté : la ligne est parsée, sa source .gitignore est suivie, et le verdict est VERSIONNEE.
Portée réelle aujourd'hui
Elle est faible. Les règles de main ignorent le répertoire (.secrets/), et git ne peut pas réinclure un fichier dont le répertoire parent est exclu. Le défaut devient réel si quelqu'un réécrit un jour la règle en .secrets/* puis ajoute une exception !…. La garde passerait alors au vert sur un secret stageable.
Remède proposé
Dans verdict_chemin, quand le motif parsé commence par !, rendre NON_IGNORE (avec la source nommée), et ajouter un test de contrôle positif sur ce cas.
L'organe du trousseau (#17425, commit 56a97902c3) applique déjà ce traitement côté appelant, avec un test (test_motif_de_negation_n_est_pas_une_protection). La correction doit remonter dans l'organe partagé, et l'appelant la retirera ensuite.
Grain: LIGHT/guard -- lane myia-ai-01:CoursIA
Constat
scripts/ci/check_secret_paths_ignored.py(#17442), fonctionverdict_chemin, classe un chemin désignoré par un motif de négation commeVERSIONNEE, c'est-à-dire protégé.Git le permet sans erreur :
git check-ignore -v --no-indexrendrc=0quand la règle gagnante est une négation. Mesure sur un dépôt neuf dont le.gitignorecontientversionne/*puis!versionne/visible.env:verdict_chemintestereturncode == 1 and not stdoutpour conclureNON_IGNORE. Ce cas passe donc à côté : la ligne est parsée, sa source.gitignoreest suivie, et le verdict estVERSIONNEE.Portée réelle aujourd'hui
Elle est faible. Les règles de
mainignorent le répertoire (.secrets/), et git ne peut pas réinclure un fichier dont le répertoire parent est exclu. Le défaut devient réel si quelqu'un réécrit un jour la règle en.secrets/*puis ajoute une exception!…. La garde passerait alors au vert sur un secret stageable.Remède proposé
Dans
verdict_chemin, quand le motif parsé commence par!, rendreNON_IGNORE(avec la source nommée), et ajouter un test de contrôle positif sur ce cas.L'organe du trousseau (#17425, commit
56a97902c3) applique déjà ce traitement côté appelant, avec un test (test_motif_de_negation_n_est_pas_une_protection). La correction doit remonter dans l'organe partagé, et l'appelant la retirera ensuite.