From 87f0cbedbc75f6eb7f1d57b2380d7b7b2cc8a12a Mon Sep 17 00:00:00 2001 From: John Jones Date: Thu, 15 Dec 2016 13:06:12 -0500 Subject: [PATCH] fixed memory leak for file exporter --- importer/exporter.c | 6 +++++- merkledag/merkledag.c | 19 +++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/importer/exporter.c b/importer/exporter.c index 1c38226..0c72d3c 100644 --- a/importer/exporter.c +++ b/importer/exporter.c @@ -29,6 +29,9 @@ int ipfs_exporter_to_file(const unsigned char* hash, const char* file_name, cons return 0; } + // no longer need the cid + ipfs_cid_free(cid); + // process blocks FILE* file = fopen(file_name, "wb"); if (file == NULL) { @@ -50,12 +53,13 @@ int ipfs_exporter_to_file(const unsigned char* hash, const char* file_name, cons return 0; } bytes_written = fwrite(link_node->data, 1, link_node->data_size, file); - ipfs_node_free(link_node); if (bytes_written != link_node->data_size) { + ipfs_node_free(link_node); fclose(file); ipfs_node_free(read_node); return 0; } + ipfs_node_free(link_node); link = link->next; } diff --git a/merkledag/merkledag.c b/merkledag/merkledag.c index 9a02776..7e506c1 100644 --- a/merkledag/merkledag.c +++ b/merkledag/merkledag.c @@ -62,14 +62,25 @@ int ipfs_merkledag_get(const struct Cid* cid, struct Node** node, const struct F // we have the record from the db. Go get the block from the blockstore retVal = ipfs_repo_fsrepo_block_read(cid, &block, fs_repo); + if (retVal == 0) { + return 0; + } // now convert the block into a node - ipfs_node_protobuf_decode(block->data, block->data_length, node); - // doesn't decode do this? No - ipfs_node_set_cached(*node, cid); + if (ipfs_node_protobuf_decode(block->data, block->data_length, node) == 0) { + ipfs_blocks_block_free(block); + return 0; + } + + // set the cid on the node + if (ipfs_node_set_cached(*node, cid) == 0) { + ipfs_blocks_block_free(block); + ipfs_node_free(*node); + return 0; + } // free resources ipfs_blocks_block_free(block); - return retVal; + return 1; }