Commit 4aad724d3e52238e1ce005f166fbba5b4072a7f6
Committed by
Linus Torvalds
1 parent
00a5dfdb93
Exists in
master
and in
39 other branches
[PATCH] Update in-kernel zlib routines
These bugs have been fixed in the standard zlib for a while. See for example a) http://sources.redhat.com/ml/bug-gnu-utils/1999-06/msg00183.html b) http://bugs.gentoo.org/show_bug.cgi?id=94584 Signed-off-by: Tim Yamin <plasmaroo@gentoo.org> Signed-off-by: Tavis Ormandy <taviso@gentoo.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Showing 3 changed files with 12 additions and 9 deletions Side-by-side Diff
arch/ppc64/boot/zlib.c
... | ... | @@ -1307,7 +1307,7 @@ |
1307 | 1307 | { |
1308 | 1308 | *t = (inflate_huft *)Z_NULL; |
1309 | 1309 | *m = 0; |
1310 | - return Z_OK; | |
1310 | + return Z_DATA_ERROR; | |
1311 | 1311 | } |
1312 | 1312 | |
1313 | 1313 | |
... | ... | @@ -1351,6 +1351,7 @@ |
1351 | 1351 | if ((j = *p++) != 0) |
1352 | 1352 | v[x[j]++] = i; |
1353 | 1353 | } while (++i < n); |
1354 | + n = x[g]; /* set n to length of v */ | |
1354 | 1355 | |
1355 | 1356 | |
1356 | 1357 | /* Generate the Huffman codes and for each, make the table entries */ |
lib/inflate.c
... | ... | @@ -326,7 +326,7 @@ |
326 | 326 | { |
327 | 327 | *t = (struct huft *)NULL; |
328 | 328 | *m = 0; |
329 | - return 0; | |
329 | + return 2; | |
330 | 330 | } |
331 | 331 | |
332 | 332 | DEBG("huft2 "); |
... | ... | @@ -374,6 +374,7 @@ |
374 | 374 | if ((j = *p++) != 0) |
375 | 375 | v[x[j]++] = i; |
376 | 376 | } while (++i < n); |
377 | + n = x[g]; /* set n to length of v */ | |
377 | 378 | |
378 | 379 | DEBG("h6 "); |
379 | 380 | |
... | ... | @@ -410,12 +411,13 @@ |
410 | 411 | DEBG1("2 "); |
411 | 412 | f -= a + 1; /* deduct codes from patterns left */ |
412 | 413 | xp = c + k; |
413 | - while (++j < z) /* try smaller tables up to z bits */ | |
414 | - { | |
415 | - if ((f <<= 1) <= *++xp) | |
416 | - break; /* enough codes to use up j bits */ | |
417 | - f -= *xp; /* else deduct codes from patterns */ | |
418 | - } | |
414 | + if (j < z) | |
415 | + while (++j < z) /* try smaller tables up to z bits */ | |
416 | + { | |
417 | + if ((f <<= 1) <= *++xp) | |
418 | + break; /* enough codes to use up j bits */ | |
419 | + f -= *xp; /* else deduct codes from patterns */ | |
420 | + } | |
419 | 421 | } |
420 | 422 | DEBG1("3 "); |
421 | 423 | z = 1 << j; /* table entries for j-bit table */ |