components/gzip/patches/6470484.patch
author Norm Jacobs <Norm.Jacobs@Oracle.COM>
Tue, 01 Mar 2011 14:19:15 -0800
changeset 115 c360825c3a3f
parent 96 components/gzip/6470484.patch@0cad26ba1671
permissions -rw-r--r--
7022166 userland patches should move to subdirs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
96
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     1
Index: gnu/usr.bin/gzip/gzip.h
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     2
===================================================================
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     3
RCS file: /home/ncvs/src/gnu/usr.bin/gzip/gzip.h,v
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     4
retrieving revision 1.4
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     5
diff -u -d -r1.4 gzip.h
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     6
--- gzip/gzip.h	2 May 2004 23:07:49 -0000	1.4
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     7
+++ gzip/gzip.h	17 Sep 2006 10:58:37 -0000
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     8
@@ -202,6 +202,8 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     9
 extern int to_stdout;      /* output to stdout (-c) */
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    10
 extern int save_orig_name; /* set if original name must be saved */
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    11
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    12
+#define MIN(a,b) ((a) <= (b) ? (a) : (b))
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    13
+
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    14
 #define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf(0))
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    15
 #define try_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf(1))
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    16
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    17
Index: gnu/usr.bin/gzip/inflate.c
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    18
===================================================================
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    19
RCS file: /home/ncvs/src/gnu/usr.bin/gzip/inflate.c,v
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    20
retrieving revision 1.9
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    21
diff -u -d -r1.9 inflate.c
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    22
--- gzip/inflate.c	13 Aug 2004 05:38:44 -0000	1.9
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    23
+++ gzip/inflate.c	17 Sep 2006 10:58:37 -0000
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    24
@@ -316,7 +316,7 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    25
   {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    26
     *t = (struct huft *)NULL;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    27
     *m = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    28
-    return 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    29
+    return 2;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    30
   }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    31
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    32
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    33
Index: gnu/usr.bin/gzip/unlzh.c
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    34
===================================================================
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    35
RCS file: /home/ncvs/src/gnu/usr.bin/gzip/unlzh.c,v
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    36
retrieving revision 1.5
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    37
diff -u -d -r1.5 unlzh.c
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    38
--- gzip/unlzh.c	27 Aug 1999 23:35:53 -0000	1.5
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    39
+++ gzip/unlzh.c	17 Sep 2006 10:58:37 -0000
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    40
@@ -148,13 +148,17 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    41
     unsigned i, k, len, ch, jutbits, avail, nextcode, mask;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    42
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    43
     for (i = 1; i <= 16; i++) count[i] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    44
-    for (i = 0; i < (unsigned)nchar; i++) count[bitlen[i]]++;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    45
+    for (i = 0; i < (unsigned)nchar; i++) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    46
+        if (bitlen[i] > 16)
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    47
+        error("Bad table (case a)\n");
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    48
+        else count[bitlen[i]]++;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    49
+    }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    50
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    51
     start[1] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    52
     for (i = 1; i <= 16; i++)
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    53
 	start[i + 1] = start[i] + (count[i] << (16 - i));
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    54
-    if ((start[17] & 0xffff) != 0)
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    55
-	error("Bad table\n");
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    56
+    if ((start[17] & 0xffff) != 0 || tablebits > 16) /* 16 for weight below */
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    57
+	error("Bad table (case b)\n");
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    58
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    59
     jutbits = 16 - tablebits;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    60
     for (i = 1; i <= (unsigned)tablebits; i++) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    61
@@ -168,15 +172,15 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    62
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    63
     i = start[tablebits + 1] >> jutbits;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    64
     if (i != 0) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    65
-	k = 1 << tablebits;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    66
-	while (i != k) table[i++] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    67
+	k = MIN(1 << tablebits, DIST_BUFSIZE);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    68
+	while (i < k) table[i++] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    69
     }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    70
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    71
     avail = nchar;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    72
     mask = (unsigned) 1 << (15 - tablebits);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    73
     for (ch = 0; ch < (unsigned)nchar; ch++) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    74
 	if ((len = bitlen[ch]) == 0) continue;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    75
-	nextcode = start[len] + weight[len];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    76
+	nextcode = MIN(start[len] + weight[len], DIST_BUFSIZE);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    77
 	if (len <= (unsigned)tablebits) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    78
 	    for (i = start[len]; i < nextcode; i++) table[i] = ch;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    79
 	} else {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    80
@@ -217,7 +221,7 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    81
 	for (i = 0; i < 256; i++) pt_table[i] = c;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    82
     } else {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    83
 	i = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    84
-	while (i < n) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    85
+	while (i < MIN(n,NPT)) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    86
 	    c = bitbuf >> (BITBUFSIZ - 3);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    87
 	    if (c == 7) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    88
 		mask = (unsigned) 1 << (BITBUFSIZ - 1 - 3);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    89
@@ -227,7 +231,7 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    90
 	    pt_len[i++] = c;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    91
 	    if (i == i_special) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    92
 		c = getbits(2);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    93
-		while (--c >= 0) pt_len[i++] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    94
+		while (--c >= 0 && i < NPT) pt_len[i++] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    95
 	    }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    96
 	}
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    97
 	while (i < nn) pt_len[i++] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    98
@@ -247,7 +251,7 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    99
 	for (i = 0; i < 4096; i++) c_table[i] = c;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   100
     } else {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   101
 	i = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   102
-	while (i < n) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   103
+	while (i < MIN(n,NC)) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   104
 	    c = pt_table[bitbuf >> (BITBUFSIZ - 8)];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   105
 	    if (c >= NT) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   106
 		mask = (unsigned) 1 << (BITBUFSIZ - 1 - 8);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   107
@@ -255,14 +259,14 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   108
 		    if (bitbuf & mask) c = right[c];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   109
 		    else               c = left [c];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   110
 		    mask >>= 1;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   111
-		} while (c >= NT);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   112
+		} while (c >= NT && (mask || c != left[c]));
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   113
 	    }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   114
 	    fillbuf((int) pt_len[c]);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   115
 	    if (c <= 2) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   116
 		if      (c == 0) c = 1;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   117
 		else if (c == 1) c = getbits(4) + 3;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   118
 		else             c = getbits(CBIT) + 20;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   119
-		while (--c >= 0) c_len[i++] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   120
+		while (--c >= 0 && i < NC) c_len[i++] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   121
 	    } else c_len[i++] = c - 2;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   122
 	}
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   123
 	while (i < NC) c_len[i++] = 0;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   124
@@ -291,7 +295,7 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   125
 	    if (bitbuf & mask) j = right[j];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   126
 	    else               j = left [j];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   127
 	    mask >>= 1;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   128
-	} while (j >= NC);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   129
+	} while (j >= NC && (mask || j != left[j]));
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   130
     }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   131
     fillbuf((int) c_len[j]);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   132
     return j;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   133
@@ -308,7 +312,7 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   134
 	    if (bitbuf & mask) j = right[j];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   135
 	    else               j = left [j];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   136
 	    mask >>= 1;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   137
-	} while (j >= NP);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   138
+	} while (j >= NP && (mask || j != left[j]));
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   139
     }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   140
     fillbuf((int) pt_len[j]);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   141
     if (j != 0) j = ((unsigned) 1 << (j - 1)) + getbits((int) (j - 1));
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   142
@@ -355,7 +359,7 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   143
     while (--j >= 0) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   144
 	buffer[r] = buffer[i];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   145
 	i = (i + 1) & (DICSIZ - 1);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   146
-	if (++r == count) return r;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   147
+	if (++r >= count) return r;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   148
     }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   149
     for ( ; ; ) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   150
 	c = decode_c();
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   151
@@ -365,14 +369,14 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   152
 	}
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   153
 	if (c <= UCHAR_MAX) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   154
 	    buffer[r] = c;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   155
-	    if (++r == count) return r;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   156
+	    if (++r >= count) return r;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   157
 	} else {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   158
 	    j = c - (UCHAR_MAX + 1 - THRESHOLD);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   159
 	    i = (r - decode_p() - 1) & (DICSIZ - 1);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   160
 	    while (--j >= 0) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   161
 		buffer[r] = buffer[i];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   162
 		i = (i + 1) & (DICSIZ - 1);
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   163
-		if (++r == count) return r;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   164
+		if (++r >= count) return r;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   165
 	    }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   166
 	}
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   167
     }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   168
Index: gnu/usr.bin/gzip/unpack.c
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   169
===================================================================
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   170
RCS file: /home/ncvs/src/gnu/usr.bin/gzip/unpack.c,v
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   171
retrieving revision 1.6
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   172
diff -u -d -r1.6 unpack.c
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   173
--- gzip/unpack.c	27 Aug 1999 23:35:54 -0000	1.6
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   174
+++ gzip/unpack.c	17 Sep 2006 10:58:37 -0000
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   175
@@ -12,7 +12,6 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   176
 #include "gzip.h"
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   177
 #include "crypt.h"
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   178
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   179
-#define MIN(a,b) ((a) <= (b) ? (a) : (b))
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   180
 /* The arguments must not have side effects. */
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   181
 
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   182
 #define MAX_BITLEN 25
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   183
@@ -132,7 +131,7 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   184
 	/* Remember where the literals of this length start in literal[] : */
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   185
 	lit_base[len] = base;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   186
 	/* And read the literals: */
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   187
-	for (n = leaves[len]; n > 0; n--) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   188
+	for (n = leaves[len]; n > 0 && base < LITERALS; n--) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   189
 	    literal[base++] = (uch)get_byte();
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   190
 	}
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   191
     }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   192
@@ -168,7 +167,7 @@
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   193
     prefixp = &prefix_len[1<<peek_bits];
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   194
     for (len = 1; len <= peek_bits; len++) {
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   195
 	int prefixes = leaves[len] << (peek_bits-len); /* may be 0 */
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   196
-	while (prefixes--) *--prefixp = (uch)len;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   197
+	while (prefixes-- && prefixp > prefix_len) *--prefixp = (uch)len;
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   198
     }
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   199
     /* The length of all other codes is unknown: */
0cad26ba1671 7019038 move gzip to userland
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   200
     while (prefixp > prefix_len) *--prefixp = 0;