Commit 4aad724d3e52238e1ce005f166fbba5b4072a7f6

Authored by Tim Yamin
Committed by Linus Torvalds
1 parent 00a5dfdb93

[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 */
... ... @@ -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 */
lib/zlib_inflate/inftrees.c
... ... @@ -141,7 +141,7 @@
141 141 {
142 142 *t = NULL;
143 143 *m = 0;
144   - return Z_OK;
  144 + return Z_DATA_ERROR;
145 145 }
146 146  
147 147