summaryrefslogtreecommitdiff
path: root/infblock.c
diff options
context:
space:
mode:
Diffstat (limited to 'infblock.c')
-rw-r--r--infblock.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/infblock.c b/infblock.c
index 3a9cf85..04a5653 100644
--- a/infblock.c
+++ b/infblock.c
@@ -71,7 +71,11 @@ uLong *c;
71 if (s->mode == BTREE || s->mode == DTREE) 71 if (s->mode == BTREE || s->mode == DTREE)
72 ZFREE(z, s->sub.trees.blens); 72 ZFREE(z, s->sub.trees.blens);
73 if (s->mode == CODES) 73 if (s->mode == CODES)
74 inflate_codes_free(s->sub.codes, z); 74 {
75 inflate_codes_free(s->sub.decode.codes, z);
76 inflate_trees_free(s->sub.decode.td, z);
77 inflate_trees_free(s->sub.decode.tl, z);
78 }
75 s->mode = TYPE; 79 s->mode = TYPE;
76 s->bitk = 0; 80 s->bitk = 0;
77 s->bitb = 0; 81 s->bitb = 0;
@@ -147,12 +151,14 @@ int r;
147 inflate_huft *tl, *td; 151 inflate_huft *tl, *td;
148 152
149 inflate_trees_fixed(&bl, &bd, &tl, &td); 153 inflate_trees_fixed(&bl, &bd, &tl, &td);
150 s->sub.codes = inflate_codes_new(bl, bd, tl, td, z); 154 s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
151 if (s->sub.codes == Z_NULL) 155 if (s->sub.decode.codes == Z_NULL)
152 { 156 {
153 r = Z_MEM_ERROR; 157 r = Z_MEM_ERROR;
154 LEAVE 158 LEAVE
155 } 159 }
160 s->sub.decode.tl = Z_NULL; /* don't try to free these */
161 s->sub.decode.td = Z_NULL;
156 } 162 }
157 DUMPBITS(3) 163 DUMPBITS(3)
158 s->mode = CODES; 164 s->mode = CODES;
@@ -181,7 +187,7 @@ int r;
181 LEAVE 187 LEAVE
182 } 188 }
183 s->sub.left = (uInt)b & 0xffff; 189 s->sub.left = (uInt)b & 0xffff;
184 k = b = 0; /* dump bits */ 190 b = k = 0; /* dump bits */
185 Tracev((stderr, "inflate: stored length %u\n", s->sub.left)); 191 Tracev((stderr, "inflate: stored length %u\n", s->sub.left));
186 s->mode = s->sub.left ? STORED : TYPE; 192 s->mode = s->sub.left ? STORED : TYPE;
187 break; 193 break;
@@ -318,7 +324,9 @@ int r;
318 LEAVE 324 LEAVE
319 } 325 }
320 ZFREE(z, s->sub.trees.blens); 326 ZFREE(z, s->sub.trees.blens);
321 s->sub.codes = c; 327 s->sub.decode.codes = c;
328 s->sub.decode.tl = tl;
329 s->sub.decode.td = td;
322 } 330 }
323 s->mode = CODES; 331 s->mode = CODES;
324 case CODES: 332 case CODES:
@@ -326,7 +334,9 @@ int r;
326 if ((r = inflate_codes(s, z, r)) != Z_STREAM_END) 334 if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
327 return inflate_flush(s, z, r); 335 return inflate_flush(s, z, r);
328 r = Z_OK; 336 r = Z_OK;
329 inflate_codes_free(s->sub.codes, z); 337 inflate_codes_free(s->sub.decode.codes, z);
338 inflate_trees_free(s->sub.decode.td, z);
339 inflate_trees_free(s->sub.decode.tl, z);
330 LOAD 340 LOAD
331 Tracev((stderr, "inflate: codes end, %lu total out\n", 341 Tracev((stderr, "inflate: codes end, %lu total out\n",
332 z->total_out + (q >= s->read ? q - s->read : 342 z->total_out + (q >= s->read ? q - s->read :