diff options
Diffstat (limited to 'infblock.c')
-rw-r--r-- | infblock.c | 22 |
1 files changed, 16 insertions, 6 deletions
@@ -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 : |