Patrick Williams | 03907ee | 2022-05-01 06:28:52 -0500 | [diff] [blame] | 1 | From ec3df00224d4b396e2ac6586ab5d25f673caa4c2 Mon Sep 17 00:00:00 2001 |
| 2 | From: Mark Adler <madler@alumni.caltech.edu> |
| 3 | Date: Wed, 30 Mar 2022 11:14:53 -0700 |
| 4 | Subject: [PATCH] Correct incorrect inputs provided to the CRC functions. |
| 5 | |
| 6 | The previous releases of zlib were not sensitive to incorrect CRC |
| 7 | inputs with bits set above the low 32. This commit restores that |
| 8 | behavior, so that applications with such bugs will continue to |
| 9 | operate as before. |
| 10 | |
| 11 | Upstream-Status: Backport [https://github.com/madler/zlib/commit/ec3df00224d4b396e2ac6586ab5d25f673caa4c2] |
| 12 | Signed-off-by: Jacob Kroon <jacob.kroon@gmail.com> |
| 13 | --- |
| 14 | crc32.c | 8 ++++---- |
| 15 | 1 file changed, 4 insertions(+), 4 deletions(-) |
| 16 | |
| 17 | diff --git a/crc32.c b/crc32.c |
| 18 | index a1bdce5..451887b 100644 |
| 19 | --- a/crc32.c |
| 20 | +++ b/crc32.c |
| 21 | @@ -630,7 +630,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) |
| 22 | #endif /* DYNAMIC_CRC_TABLE */ |
| 23 | |
| 24 | /* Pre-condition the CRC */ |
| 25 | - crc ^= 0xffffffff; |
| 26 | + crc = (~crc) & 0xffffffff; |
| 27 | |
| 28 | /* Compute the CRC up to a word boundary. */ |
| 29 | while (len && ((z_size_t)buf & 7) != 0) { |
| 30 | @@ -749,7 +749,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) |
| 31 | #endif /* DYNAMIC_CRC_TABLE */ |
| 32 | |
| 33 | /* Pre-condition the CRC */ |
| 34 | - crc ^= 0xffffffff; |
| 35 | + crc = (~crc) & 0xffffffff; |
| 36 | |
| 37 | #ifdef W |
| 38 | |
| 39 | @@ -1077,7 +1077,7 @@ uLong ZEXPORT crc32_combine64(crc1, crc2, len2) |
| 40 | #ifdef DYNAMIC_CRC_TABLE |
| 41 | once(&made, make_crc_table); |
| 42 | #endif /* DYNAMIC_CRC_TABLE */ |
| 43 | - return multmodp(x2nmodp(len2, 3), crc1) ^ crc2; |
| 44 | + return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff); |
| 45 | } |
| 46 | |
| 47 | /* ========================================================================= */ |
| 48 | @@ -1112,5 +1112,5 @@ uLong crc32_combine_op(crc1, crc2, op) |
| 49 | uLong crc2; |
| 50 | uLong op; |
| 51 | { |
| 52 | - return multmodp(op, crc1) ^ crc2; |
| 53 | + return multmodp(op, crc1) ^ (crc2 & 0xffffffff); |
| 54 | } |