Index: src/OFInflateStream.m ================================================================== --- src/OFInflateStream.m +++ src/OFInflateStream.m @@ -296,10 +296,21 @@ } - (void)dealloc { [_stream release]; + + if (_state == HUFFMAN_TREE) + if (_context.huffmanTree.codeLenTree != NULL) + releaseTree(_context.huffmanTree.codeLenTree); + + if (_state == HUFFMAN_TREE || _state == HUFFMAN_BLOCK) { + if (_context.huffman.litLenTree != fixedLitLenTree) + releaseTree(_context.huffman.litLenTree); + if (_context.huffman.distTree != fixedDistTree) + releaseTree(_context.huffman.distTree); + } [super dealloc]; } #endif @@ -556,10 +567,11 @@ CTX.value = 0xFF; } releaseTree(CTX.codeLenTree); + CTX.codeLenTree = NULL; CTX.litLenTree = constructTree(CTX.lengths, CTX.litLenCodesCount + 257); CTX.distTree = constructTree( CTX.lengths + CTX.litLenCodesCount + 257,