From: LorenzoPegorari Date: Fri, 16 Jan 2026 00:04:22 GMT Subject: [GSoC PATCH v2 0/2] diff: improve scaling of filenames in diffstat to handle UTF-8 chars Message-ID: In-Reply-To: Added a test (as Junio Hamano suggested) to check how the generated diffstat handles UTF-8 characters when given various `name-width`s. This allowed me to notice a bug where, if the given `name-width` was 2 or less, the `len` variable would become negative, entering an infinite loop. So I also fixed this bug. LorenzoPegorari (2): diff: improve scaling of filenames in diffstat to handle UTF-8 chars t4073: add test for diffstat paths length when containing UTF-8 chars diff.c | 17 ++++----- t/meson.build | 1 + t/t4073-diff-stat-name-width.sh | 61 +++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 11 deletions(-) create mode 100755 t/t4073-diff-stat-name-width.sh Range-diff against v1: 1: 63e73122d1 ! 1: abeb8d3439 diff: improve scaling of filenames in diffstat to handle UTF-8 chars @@ Commit message characters to drop from the filename, rather than their display width, using the `utf8_width()` function. + Force `len` to not be less than 0 (this happens if the given `name-width` is + 2 or less), otherwise an infinite loop is entered. + Signed-off-by: LorenzoPegorari ## diff.c ## @@ diff.c: static void show_stats(struct diffstat_t *data, struct diff_options *opt - * leave the resulting string still too long. - */ - name += name_len - len; ++ if (len < 0) ++ len = 0; + + while (name_len > len) + name_len -= utf8_width((const char**)&name, NULL); -: ---------- > 2: ee088ea6ef t4073: add test for diffstat paths length when containing UTF-8 chars -- 2.43.0