fix: reject a corrupt db.sql.gz before the destructive reset step #167
No reviewers
Labels
No labels
auto-merge
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
AcadeNice/corentin_wakdo!167
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/demo-reset-dump-integrity"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Le defaut
demo-reset.shverifiait l'integrite de l'archive uploads a l'etape[1/6],avant toute destruction, mais jamais celle du dump de la base :
validate_snapshot_dirse contentait de constater quedb.sql.gzexiste.Un dump tronque ou corrompu (copie ou transfert interrompu, disque plein,
dossier
--snapshotassemble a la main) passait donc l'etape[1/6]—--dry-runannoncait meme « compatible » — puis cassait en plein milieu del'etape
[4/6],DROP/CREATEdeja rejoues et base laissee dans un etatintermediaire incoherent.
Mesure sur pile jetable, instantane de reference tronque de moitie :
menu_slot_option[4/6]C'est exactement le scenario que le filet existe pour eviter, le jour de
l'oral, devant le jury.
Le correctif
validate_snapshot_dirverifie desormais surdb.sql.gzles deux memesinvariants que
capture_snapshotgarantit a la creation :gzip -t) ;-- Dump completed— un dump tronque puis recompressepasserait
gzip -tseul.gzip -tplutot qu'un tubegzip -dc | tailpour que le controle ne dependepas en silence de
pipefailchez l'appelant.Le test
tests/shell/demo-snapshot-lib.test.shcouvrevalidate_snapshot_dirsansDocker (la fonction ne lit que des fichiers) : 14 assertions, dont 4 echouent
sur la version precedente. Un job
shell-testsles execute en CI.Verification
Filet exerce de bout en bout sur une pile jetable (
wakdodemoverif), productionjamais touchee : instantane pris (24 tables, 761 lignes), refus sur schema
divergent dans les deux sens (code 3), identite de cible divergente (code 7),
--dry-runsans effet, remise a zero apres degat verifiee table par table,sauvegarde de securite restaurable (retour arriere reussi), sessions PHP
invalidees (401 apres reset sur un cookie valide avant), images restaurees au
md5 pres.