CSV rows for stdout sit in a 4 KB buffer until the run ends
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 76/100
Piste de recherche
Commence dans internal/output/writer.go : ensureCSV enveloppe stdout dans un csv.NewWriter, et writeCSVRows écrit chaque ligne sans flush, donc le flush n'a lieu que dans Finish. Reproduis avec -simulate -format csv ... | cat par rapport à -format jsonl. C'est terminé quand chaque ligne CSV sur stdout est flushée au moment de son écriture, et qu'un test dans le paquet output (utilisant -simulate ou le serveur DNS de test local, pas un domaine réel) lit une ligne sur stdout avant la fin de l'exécution.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
With -format csv, results reach stdout only when 4 KB has accumulated or the run finishes, unlike text, JSON and JSONL, which are written as each result is found; a force quit loses the buffered rows.
Where
internal/output/writer.go:328internal/output/writer.go:354internal/output/writer.go:390internal/output/writer.go:30
Details
ensureCSV wraps stdout in csv.NewWriter(w.stdOut()) (line 328) and writeCSVRows only calls w.csvStdout.Write(row) (line 355). encoding/csv.Writer buffers through a bufio.Writer and is flushed in exactly one place, Finish (lines 390-392; git grep "Flush()" confirms). Text, JSONL and even the JSON array (w.stdOut().Write(data), line 279) are written to stdout as each result is found. The FormatCSV doc comment says it "streams" rows (line 30).
Impact
With -format csv, nothing reaches stdout until 4 KB of rows have accumulated or the run finishes: a consumer on a pipe sees no live results, on a terminal the rows appear after the "Scan complete" breakdown instead of as they are found, and a force quit (the second Ctrl+C, which main_session.go:519-521 deliberately restores) loses every buffered row. The other three formats do not behave this way.
Steps to reproduce
subenum -simulate -hit-rate 100 -rate 2 -format csv -w examples/sample_wordlist.txt example.com | cat prints nothing until the scan ends; the same command with -format jsonl prints a line per hit.
Suggested fix
Call w.csvStdout.Flush() at the end of writeCSVRows when w.csvStdout != nil (stdout only; the file writer already sits on the -o bufio.Writer and can stay buffered).
Acceptance criteria
- Each CSV row written to stdout is flushed when it is written
- A test reads a row from stdout before the run finishes
Getting started
- Relevant files:
internal/output/writer.go - How to run tests:
make test(orgo test ./...). Tests must stay hermetic: use-simulate,-simulate-zoneor the local DNS test server, never a live domain. - Related docs:
docs/DEVELOPER_GUIDE.md,docs/ARCHITECTURE.md
Filed by repo-audit/full-audit at d0c56f0. Severity: low. Effort: S. audit-key: bug|internal/output/writer.go|writeCSVRows
- Langage dominant
- Go
- Étoiles
- 1
- Forks
- 1
- Merge moyen
- 6 h 42 min
- PR mergées (30 j)
- 7
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Fournit un Dockerfile ou un fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de TMHSDigital/subenum
-
good first issue severity: low tech-debt
Difficulté 2/5 Une demi-journée Accessibilité débutants 75/100
TMHSDigital/subenum#329 ·
Les mainteneurs répondent en général sous 1 jour
-
area: docs documentation good first issue severity: low
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
TMHSDigital/subenum#327 ·
Les mainteneurs répondent en général sous 1 jour
-
area: release dependencies good first issue severity: low
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
TMHSDigital/subenum#324 ·
Les mainteneurs répondent en général sous 1 jour
-
ci good first issue severity: low
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
TMHSDigital/subenum#323 ·
Les mainteneurs répondent en général sous 1 jour
-
community documentation good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
TMHSDigital/subenum#135 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de TMHSDigital/subenum
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
GillMacedo/godebugdiff#13 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
GillMacedo/racesift#14 ·
-
IsTextFile reads the whole file into memory (OOM on large files in the file watcher)Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
gtsteffaniak/filebrowser#3395 ·
Les mainteneurs répondent en général sous 1 jour
-
effort:s impact:low raised-by:worker risk:low
Difficulté 1/5 Moins d'une heure Accessibilité débutants 70/100
medici-finance/assay#6496 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
kind/bug require/reproduce require/severity
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour