1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-07-26 10:39:01 +02:00

sort: fix unlikely int overflow with -r

* src/sort.c (keycompare, compare): Don’t overflow if -r is
specified and a comparison function returns INT_MIN, as this
causes the comparison to have undefined behavior (typically the
reverse of correct).  glibc memcmp on s390x reportedly returns
INT_MIN in some cases, so this is not a purely academic issue.
This commit is contained in:
Paul Eggert
2022-05-17 19:30:09 -07:00
parent 5864e8f919
commit a351fdd6fc
+6 -2
View File
@@ -2794,7 +2794,9 @@ keycompare (struct line const *a, struct line const *b)
}
}
return key->reverse ? -diff : diff;
if (key->reverse)
diff = diff < 0 ? -1 : -diff;
return diff;
}
/* Compare two lines A and B, returning negative, zero, or positive
@@ -2839,7 +2841,9 @@ compare (struct line const *a, struct line const *b)
diff = (alen > blen) - (alen < blen);
}
return reverse ? -diff : diff;
if (reverse)
diff = diff < 0 ? 1 : -diff;
return diff;
}
/* Write LINE to output stream FP; the output file's name is