已关闭
fix: CVE-2026-27171 crc32_combine CPU consumption (backport of zlib 1.3.2 fix) [OpenHarmony-5.1.0-Release] #115
wu-jinpeng981212创建于 24 天前关闭于 3 天前
fix: CVE-2026-27171 crc32_combine CPU consumption (backport of zlib 1.3.2 fix) [OpenHarmony-5.1.0-Release] #115
已关闭
共 1 个文件变更+10-6
| @@ -173,13 +173,13 @@ local z_crc_t multmodp(z_crc_t a, z_crc_t b) | |||
| 173 | 173 | ||
| 174 | /* | 174 | /* |
| 175 | Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been | 175 | Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been |
| 176 | - initialized. | 176 | + initialized. n must not be negative. |
| 177 | */ | 177 | */ |
| 178 | -local z_crc_t x2nmodp(z_off64_t n, unsigned k) | 178 | +local uLong x2nmodp(z_off64_t n, unsigned k) |
| 179 | { | 179 | { |
| 180 | - z_crc_t p; | 180 | + uLong p; |
| 181 | 181 | ||
| 182 | - p = (z_crc_t)1 << 31; /* x^0 == 1 */ | 182 | + p = (uLong)1 << 31; /* x^0 == 1 */ |
| 183 | while (n) { | 183 | while (n) { |
| 184 | if (n & 1) | 184 | if (n & 1) |
| 185 | p = multmodp(x2n_table[k & 31], p); | 185 | p = multmodp(x2n_table[k & 31], p); |
| @@ -538,7 +538,7 @@ local void braid(z_crc_t ltl[][256], z_word_t big[][256], int n, int w) | |||
| 538 | int k; | 538 | int k; |
| 539 | z_crc_t i, p, q; | 539 | z_crc_t i, p, q; |
| 540 | for (k = 0; k < w; k++) { | 540 | for (k = 0; k < w; k++) { |
| 541 | - p = x2nmodp((n * w + 3 - k) << 3, 0); | 541 | + p = (z_crc_t)x2nmodp((n * w + 3 - k) << 3, 0); |
| 542 | ltl[k][0] = 0; | 542 | ltl[k][0] = 0; |
| 543 | big[w - 1 - k][0] = 0; | 543 | big[w - 1 - k][0] = 0; |
| 544 | for (i = 1; i < 256; i++) { | 544 | for (i = 1; i < 256; i++) { |
| @@ -649,7 +649,7 @@ unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, | |||
| 649 | } | 649 | } |
| 650 | word += 3 * last; | 650 | word += 3 * last; |
| 651 | num -= 3 * last; | 651 | num -= 3 * last; |
| 652 | - val = x2nmodp(last, 6); | 652 | + val = x2nmodp((int)last, 6); |
| 653 | crc = multmodp(val, crc) ^ crc1; | 653 | crc = multmodp(val, crc) ^ crc1; |
| 654 | crc = multmodp(val, crc) ^ crc2; | 654 | crc = multmodp(val, crc) ^ crc2; |
| 655 | } | 655 | } |
| @@ -1030,6 +1030,8 @@ unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, | |||
| 1030 | 1030 | ||
| 1031 | /* ========================================================================= */ | 1031 | /* ========================================================================= */ |
| 1032 | uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) { | 1032 | uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) { |
| 1033 | + if (len2 < 0) | ||
| 1034 | + return 0; | ||
| 1033 | 1035 | ||
| 1034 | once(&made, make_crc_table); | 1036 | once(&made, make_crc_table); |
| 1035 | 1037 | ||
| @@ -1043,6 +1045,8 @@ uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) { | |||
| 1043 | 1045 | ||
| 1044 | /* ========================================================================= */ | 1046 | /* ========================================================================= */ |
| 1045 | uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) { | 1047 | uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) { |
| 1048 | + if (len2 < 0) | ||
| 1049 | + return 0; | ||
| 1046 | 1050 | ||
| 1047 | once(&made, make_crc_table); | 1051 | once(&made, make_crc_table); |
| 1048 | 1052 | ||