From: Pádraig Brady Date: Thu, 23 Sep 2021 21:45:53 +0000 (+0100) Subject: cksum: fix -a crc on 64 bit big endian systems X-Git-Tag: v9.0~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56bff500c5e48ab9c6fc62b9d457b1f283288417;p=thirdparty%2Fcoreutils.git cksum: fix -a crc on 64 bit big endian systems * src/cksum.c (crc_sum_stream): On sparc64 for example, a crc of 0 was printed due to mismatch in size of variable copied between generator and output functions. uint_fast32_t is generally 64 bits on 64 bit systems, so we copy through an int to ensure we don't use the wrong end of a 64 bit variable. Reported by Nelson H. F. Beebe --- diff --git a/src/cksum.c b/src/cksum.c index 116d23f800..51afe89f68 100644 --- a/src/cksum.c +++ b/src/cksum.c @@ -275,7 +275,8 @@ crc_sum_stream (FILE *stream, void *resstream, uintmax_t *length) crc = (crc << 8) ^ crctab[0][((crc >> 24) ^ total_bytes) & 0xFF]; crc = ~crc & 0xFFFFFFFF; - memcpy (resstream, &crc, sizeof crc); + unsigned int crc_out = crc; + memcpy (resstream, &crc_out, sizeof crc_out); return 0; }