blob: ad5e59de04002675475098609e7b2eac7540e4ba [file] [log] [blame]
Patrick Williams03907ee2022-05-01 06:28:52 -05001From ec3df00224d4b396e2ac6586ab5d25f673caa4c2 Mon Sep 17 00:00:00 2001
2From: Mark Adler <madler@alumni.caltech.edu>
3Date: Wed, 30 Mar 2022 11:14:53 -0700
4Subject: [PATCH] Correct incorrect inputs provided to the CRC functions.
5
6The previous releases of zlib were not sensitive to incorrect CRC
7inputs with bits set above the low 32. This commit restores that
8behavior, so that applications with such bugs will continue to
9operate as before.
10
11Upstream-Status: Backport [https://github.com/madler/zlib/commit/ec3df00224d4b396e2ac6586ab5d25f673caa4c2]
12Signed-off-by: Jacob Kroon <jacob.kroon@gmail.com>
13---
14 crc32.c | 8 ++++----
15 1 file changed, 4 insertions(+), 4 deletions(-)
16
17diff --git a/crc32.c b/crc32.c
18index 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 }