aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2022-03-30 18:14:53 +0000
committerXin LI <delphij@FreeBSD.org>2022-03-31 22:35:05 +0000
commit7b495a2a7abf8dfefb59daa3864767057e054b47 (patch)
tree1c5581e7c38c31dd039c6ba64d41ade820722c13
parentc144cc54795d363d12537962a2dd4c7eaffeadbb (diff)
downloadsrc-7b495a2a7abf8dfefb59daa3864767057e054b47.tar.gz
src-7b495a2a7abf8dfefb59daa3864767057e054b47.zip
Correct incorrect inputs provided to the CRC functions.
The previous releases of zlib were not sensitive to incorrect CRC inputs with bits set above the low 32. This commit restores that behavior, so that applications with such bugs will continue to operate as before. (cherry picked from commit ec3df00224d4b396e2ac6586ab5d25f673caa4c2)
-rw-r--r--crc32.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/crc32.c b/crc32.c
index a1bdce5c23c6..451887bc7ce4 100644
--- a/crc32.c
+++ b/crc32.c
@@ -630,7 +630,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
#endif /* DYNAMIC_CRC_TABLE */
/* Pre-condition the CRC */
- crc ^= 0xffffffff;
+ crc = (~crc) & 0xffffffff;
/* Compute the CRC up to a word boundary. */
while (len && ((z_size_t)buf & 7) != 0) {
@@ -749,7 +749,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
#endif /* DYNAMIC_CRC_TABLE */
/* Pre-condition the CRC */
- crc ^= 0xffffffff;
+ crc = (~crc) & 0xffffffff;
#ifdef W
@@ -1077,7 +1077,7 @@ uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
#ifdef DYNAMIC_CRC_TABLE
once(&made, make_crc_table);
#endif /* DYNAMIC_CRC_TABLE */
- return multmodp(x2nmodp(len2, 3), crc1) ^ crc2;
+ return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff);
}
/* ========================================================================= */
@@ -1112,5 +1112,5 @@ uLong crc32_combine_op(crc1, crc2, op)
uLong crc2;
uLong op;
{
- return multmodp(op, crc1) ^ crc2;
+ return multmodp(op, crc1) ^ (crc2 & 0xffffffff);
}