diff options
Diffstat (limited to 'infblock.c')
| -rw-r--r-- | infblock.c | 11 |
1 files changed, 8 insertions, 3 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* infblock.c -- interpret and process block types to last block | 1 | /* infblock.c -- interpret and process block types to last block |
| 2 | * Copyright (C) 1995-1998 Mark Adler | 2 | * Copyright (C) 1995-2002 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| @@ -249,10 +249,12 @@ int r; | |||
| 249 | &s->sub.trees.tb, s->hufts, z); | 249 | &s->sub.trees.tb, s->hufts, z); |
| 250 | if (t != Z_OK) | 250 | if (t != Z_OK) |
| 251 | { | 251 | { |
| 252 | ZFREE(z, s->sub.trees.blens); | ||
| 253 | r = t; | 252 | r = t; |
| 254 | if (r == Z_DATA_ERROR) | 253 | if (r == Z_DATA_ERROR) |
| 254 | { | ||
| 255 | ZFREE(z, s->sub.trees.blens); | ||
| 255 | s->mode = BAD; | 256 | s->mode = BAD; |
| 257 | } | ||
| 256 | LEAVE | 258 | LEAVE |
| 257 | } | 259 | } |
| 258 | s->sub.trees.index = 0; | 260 | s->sub.trees.index = 0; |
| @@ -313,11 +315,13 @@ int r; | |||
| 313 | t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), | 315 | t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), |
| 314 | s->sub.trees.blens, &bl, &bd, &tl, &td, | 316 | s->sub.trees.blens, &bl, &bd, &tl, &td, |
| 315 | s->hufts, z); | 317 | s->hufts, z); |
| 316 | ZFREE(z, s->sub.trees.blens); | ||
| 317 | if (t != Z_OK) | 318 | if (t != Z_OK) |
| 318 | { | 319 | { |
| 319 | if (t == (uInt)Z_DATA_ERROR) | 320 | if (t == (uInt)Z_DATA_ERROR) |
| 321 | { | ||
| 322 | ZFREE(z, s->sub.trees.blens); | ||
| 320 | s->mode = BAD; | 323 | s->mode = BAD; |
| 324 | } | ||
| 321 | r = t; | 325 | r = t; |
| 322 | LEAVE | 326 | LEAVE |
| 323 | } | 327 | } |
| @@ -329,6 +333,7 @@ int r; | |||
| 329 | } | 333 | } |
| 330 | s->sub.decode.codes = c; | 334 | s->sub.decode.codes = c; |
| 331 | } | 335 | } |
| 336 | ZFREE(z, s->sub.trees.blens); | ||
| 332 | s->mode = CODES; | 337 | s->mode = CODES; |
| 333 | case CODES: | 338 | case CODES: |
| 334 | UPDATE | 339 | UPDATE |
