summaryrefslogtreecommitdiff
path: root/src/sum.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sum.c')
-rw-r--r--src/sum.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/sum.c b/src/sum.c
index b012182c8..745093109 100644
--- a/src/sum.c
+++ b/src/sum.c
@@ -176,6 +176,9 @@ sysv_sum_file (const char *file, int print_name)
for (i = 0; i < bytes_read; i++)
checksum += buf[i];
+ /* Reduce checksum mod 0xffff, to avoid overflow. */
+ checksum = (checksum & 0xffff) + (checksum >> 16);
+
total_bytes += bytes_read;
}