diff: `-y --tabsize=<huge>` overflows the column arithmetic (overflow-checks only)
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 70/100
Direção de pesquisa
Comece em src/side_diff.rs, em SideDiffConfig::new, e inspecione a aritmética em torno da linha 85, incluindo como --tabsize chega a tab_size. Reproduza o comando fornecido com as verificações de overflow habilitadas e verifique se tamanhos de tabulação extremos e zero não causam mais panic nem produzem larguras de layout inválidas.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
SideDiffConfig::new (src/side_diff.rs) computes the side-by-side column layout with signed arithmetic on the --tabsize value:
let w = full_width as isize;
let t = tab_size as isize;
let t_plus_g = t + GUTTER_WIDTH_MIN as isize; // <-- side_diff.rs:85: overflows
let unaligned_off = (w >> 1) + (t_plus_g >> 1) + (w & t_plus_g & 1);
let off = unaligned_off - unaligned_off % t; // (also % by t, and t can be 0)
--tabsize is parsed into tab_size: usize with no upper bound. A value near isize::MAX makes t + GUTTER_WIDTH_MIN (GUTTER_WIDTH_MIN == 3) overflow isize. Under -C overflow-checks=on this aborts (exit 134); in the default release build it wraps to a bogus value and the layout math silently produces garbage widths.
$ printf 'a\n' > f1; printf 'b\n' > f2
$ diff -y --tabsize=9223372036854775805 f1 f2 # overflow-checks build
thread 'main' panicked at src/side_diff.rs:85:24:
attempt to add with overflow
$ echo $?
134
- Linguagem predominante
- Rust
- Estrelas
- 276
- Forks
- 39
- Merge médio
- 3h 27min
- PRs com merge (30d)
- 3
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de uutils/diffutils
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 64/100
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 76/100
Todas as issues de uutils/diffutils
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
gitbutlerapp/gitbutler#15998 · 1 comentário ·
-
bug triage:deciding
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
open-telemetry/otel-arrow#4132 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100