From 1e4bc09dfde518d09333c8d453ad2b9e191cdab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?=
Date: Thu, 28 Dec 2023 00:02:42 +0000 Subject: [PATCH 3/3] sort: fix thousands grouping handling on single byte locales * gl/lib/strnumcmp-in.h (numcompare): After commit v9.0-8-g6cafb122f, we need to treat characters as signed to avoid invalid comparisons between negative integers and unsigned characters. * NEWS: Mention the bug fix. --- NEWS | 5 +++++ gl/lib/strnumcmp-in.h | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 26da9993e..61ba3cf19 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,11 @@ GNU coreutils NEWS -*- outline -*- numfmt options like --suffix no longer have an arbitrary 127-byte limit. [bug introduced with numfmt in coreutils-8.21] + sort again handles thousands grouping characters in single-byte locales + where the grouping character is greater than CHAR_MAX. For e.g. signed + character platforms with a 0xA0 (aka  ) grouping character. + [bug introduced in coreutils-9.1] + tail no longer mishandles input from files in /proc and /sys file systems, on systems with a page size larger than the stdio BUFSIZ. [This bug was present in "the beginning".] diff --git a/gl/lib/strnumcmp-in.h b/gl/lib/strnumcmp-in.h index 39b5caf77..3a69db732 100644 --- a/gl/lib/strnumcmp-in.h +++ b/gl/lib/strnumcmp-in.h @@ -114,8 +114,8 @@ static inline int _GL_ATTRIBUTE_PURE numcompare (char const *a, char const *b, int decimal_point, int thousands_sep) { - unsigned char tmpa = *a; - unsigned char tmpb = *b; + char tmpa = *a; + char tmpb = *b; int tmp; size_t log_a; size_t log_b; -- 2.43.0