Fix memory leaks from test_block_header.c.

This commit is contained in:
Lasse Collin 2008-01-15 16:25:38 +02:00
parent f10fc6a69d
commit 8235e6e5b2
1 changed files with 17 additions and 2 deletions

View File

@ -62,6 +62,17 @@ static const lzma_options_filter filters_delta[3] = {
}; };
static void
free_decoded_options(void)
{
for (size_t i = 0; i < sizeof(decoded_options.filters)
/ sizeof(decoded_options.filters[0]); ++i) {
free(decoded_options.filters[i].options);
decoded_options.filters[i].options = NULL;
}
}
static bool static bool
encode(uint32_t header_size) encode(uint32_t header_size)
{ {
@ -88,7 +99,9 @@ decode_ret(uint32_t header_size, lzma_ret ret_ok)
expect(lzma_block_header_decoder(&strm, &decoded_options) == LZMA_OK); expect(lzma_block_header_decoder(&strm, &decoded_options) == LZMA_OK);
return decoder_loop_ret(&strm, buffer, header_size, ret_ok); const bool ret = decoder_loop_ret(&strm, buffer, header_size, ret_ok);
free_decoded_options();
return ret;
} }
@ -100,7 +113,9 @@ decode(uint32_t header_size)
expect(lzma_block_header_decoder(&strm, &decoded_options) == LZMA_OK); expect(lzma_block_header_decoder(&strm, &decoded_options) == LZMA_OK);
if (decoder_loop(&strm, buffer, header_size)) const bool ret = decoder_loop(&strm, buffer, header_size);
free_decoded_options();
if (ret)
return true; return true;
if (known_options.has_eopm != decoded_options.has_eopm) if (known_options.has_eopm != decoded_options.has_eopm)