[P1][journal] Unifier ouverture sûre, encodage validé et borne stricte #13

Open
opened 2026-07-31 21:05:12 +00:00 by mathieu · 1 comment
Owner

Constat

Le journal suit un symlink ou peut bloquer sur un FIFO (internal/events/journal.go:63-81, :126-144). Il sérialise sans Event.Validate (:173-181) et écrit même si rotation/stat échoue ou si une ligne dépasse MaxBytes (:182-192). Trois chemins distincts contournent donc le contrat du journal.

Tâche

Ramener l'écriture à un append unique: ouverture O_NOFOLLOW non bloquante avec fstat regular/EUID/nlink/mode, encodage JSONL canonique validé, puis refus d'écriture si la borne ne peut être garantie.

Critères d'acceptation

  • Symlink, hardlink, FIFO et device sont refusés sans modification ni blocage.
  • Chaque ligne persistée passe Event.Validate.
  • Aucun fichier ne dépasse MaxBytes, même si rotation échoue.
  • Une erreur n'empêche pas une récupération ultérieure; le callback reste single-shot.

Validation

go test -race -count=50 ./internal/events ./internal/session

## Constat Le journal suit un symlink ou peut bloquer sur un FIFO (`internal/events/journal.go:63-81`, `:126-144`). Il sérialise sans `Event.Validate` (`:173-181`) et écrit même si rotation/stat échoue ou si une ligne dépasse `MaxBytes` (`:182-192`). Trois chemins distincts contournent donc le contrat du journal. ## Tâche Ramener l'écriture à un append unique: ouverture `O_NOFOLLOW` non bloquante avec `fstat` regular/EUID/nlink/mode, encodage JSONL canonique validé, puis refus d'écriture si la borne ne peut être garantie. ## Critères d'acceptation - Symlink, hardlink, FIFO et device sont refusés sans modification ni blocage. - Chaque ligne persistée passe `Event.Validate`. - Aucun fichier ne dépasse `MaxBytes`, même si rotation échoue. - Une erreur n'empêche pas une récupération ultérieure; le callback reste single-shot. ## Validation `go test -race -count=50 ./internal/events ./internal/session`

Correctif proposé et validé dans la PR #44 : #44.

Correctif proposé et validé dans la PR #44 : https://git.2027a.net/mathieu/murmur/pulls/44.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mathieu/murmur#13
No description provided.