summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2022-03-30 11:14:53 -0700
committerMark Adler <madler@alumni.caltech.edu>2022-03-30 11:14:53 -0700
commitec3df00224d4b396e2ac6586ab5d25f673caa4c2 (patch)
tree920d4f9d58c4ed76475be1044bae19b23e2c1180
parentce12773790517034317274f5c65ba70cfeea29f7 (diff)
downloadzlib-ec3df00224d4b396e2ac6586ab5d25f673caa4c2.tar.gz
zlib-ec3df00224d4b396e2ac6586ab5d25f673caa4c2.tar.bz2
zlib-ec3df00224d4b396e2ac6586ab5d25f673caa4c2.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.
-rw-r--r--crc32.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/crc32.c b/crc32.c
index a1bdce5..451887b 100644
--- a/crc32.c
+++ b/crc32.c
@@ -630,7 +630,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
630#endif /* DYNAMIC_CRC_TABLE */ 630#endif /* DYNAMIC_CRC_TABLE */
631 631
632 /* Pre-condition the CRC */ 632 /* Pre-condition the CRC */
633 crc ^= 0xffffffff; 633 crc = (~crc) & 0xffffffff;
634 634
635 /* Compute the CRC up to a word boundary. */ 635 /* Compute the CRC up to a word boundary. */
636 while (len && ((z_size_t)buf & 7) != 0) { 636 while (len && ((z_size_t)buf & 7) != 0) {
@@ -749,7 +749,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
749#endif /* DYNAMIC_CRC_TABLE */ 749#endif /* DYNAMIC_CRC_TABLE */
750 750
751 /* Pre-condition the CRC */ 751 /* Pre-condition the CRC */
752 crc ^= 0xffffffff; 752 crc = (~crc) & 0xffffffff;
753 753
754#ifdef W 754#ifdef W
755 755
@@ -1077,7 +1077,7 @@ uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
1077#ifdef DYNAMIC_CRC_TABLE 1077#ifdef DYNAMIC_CRC_TABLE
1078 once(&made, make_crc_table); 1078 once(&made, make_crc_table);
1079#endif /* DYNAMIC_CRC_TABLE */ 1079#endif /* DYNAMIC_CRC_TABLE */
1080 return multmodp(x2nmodp(len2, 3), crc1) ^ crc2; 1080 return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff);
1081} 1081}
1082 1082
1083/* ========================================================================= */ 1083/* ========================================================================= */
@@ -1112,5 +1112,5 @@ uLong crc32_combine_op(crc1, crc2, op)
1112 uLong crc2; 1112 uLong crc2;
1113 uLong op; 1113 uLong op;
1114{ 1114{
1115 return multmodp(op, crc1) ^ crc2; 1115 return multmodp(op, crc1) ^ (crc2 & 0xffffffff);
1116} 1116}