Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

apply_patch drops the BOM when line 1 is replaced, and write_file rewrites CRLF and BOM files as LF without a BOM

Aperta Adatta ai principianti
#285 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
typescript
Ambito
tooling

Direzione di ricerca

Inizia con applyHunks in src/main/tools/apply_patch.ts e write_file in src/main/tools/files.ts, poi leggi i test di regressione indicati nell’issue: apply_patch.test.ts e tools.test.ts. Controlla come vengono gestiti BOM e terminatori di riga per i file esistenti. Il lavoro è concluso quando la sostituzione della prima riga conserva il BOM e la sovrascrittura di un file con CRLF e BOM conserva entrambi, e i casi di regressione passano.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug priority: medium severity: low

Found in the Oct 11 audit (at c5f5641). Follow-up to #246.

Where: src/main/tools/apply_patch.ts:133-157 (applyHunks); src/main/tools/files.ts:229-242 (write_file).

Cause:

  • The BOM is part of line 1's text. normalizeLoose trims it, so -Write-Host … matches \uFEFFWrite-Host …, and the replacement comes entirely from the + line. The #246 fix keeps the BOM only when line 1 is a context line.
  • write_file writes Buffer.from(content) as given; unlike applyEdit and applyHunks it keeps neither line endings nor the BOM.

Reproduction (confirmed on Windows):

  • b.ps1 = \uFEFFWrite-Host "héllo"\r\nline2\r\n, a patch replacing line 1 → Write-Host "hällo"\r\nline2\r\n (BOM gone).
  • Overwriting a BOM+CRLF file with write_file → LF only, no BOM.

Impact: Windows PowerShell 5.1 reads a .ps1 without a BOM as ANSI, so non-ASCII text becomes mojibake when the script runs; CRLF files show as entirely changed in diffs.

Fix: in applyHunks, add the BOM back when the original had one and the result does not. In write_file, when overwriting an existing file, convert to detectEol(before) and keep its BOM.

Regression test: "first line replaced in a BOM file" in apply_patch.test.ts; a CRLF+BOM overwrite in tools.test.ts.

Lingua principale
TypeScript
Stelle
2
Fork
2
Merge medio
5h 28m
PR unite (30g)
24

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di PierrunoYT/patch

Tutte le issue di PierrunoYT/patch

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.