libsparse: fix memory leak in output_file_close()

Fix memory leak in output_file_close():
Arguable whose resposibility to free structs allocated inside a file
struct (the caller or the library function), but the following protocol
(i.e. this fix) would better prevent memory leaks:
1) output_file_close() function will free those structs inside a file struct,
   right before closing the file.
   * Note: those structs are originally allocated by other libsparse function.
2) If the caller wants to clean up those struct inside a file struct,
   it may.  Just free those structs, and set the pointer to NULL.
   Afterward, when file_close()'s are called, they won't be free'ed twice.

Bug: 142483439
Test: verified by script MemLeak_LastCmd.sh (attached in Bugnizer)
Change-Id: I8bb9f7c9f7d19268663e2830d1a90d27bd5f99bd
Signed-off-by: Robin Hsu <robinhsu@google.com>
This commit is contained in:
Robin Hsu 2019-11-07 13:44:08 +08:00
parent d9381651ee
commit 48c9f6196f

View file

@ -493,6 +493,10 @@ static struct sparse_file_ops normal_file_ops = {
void output_file_close(struct output_file* out) {
out->sparse_ops->write_end_chunk(out);
free(out->zero_buf);
free(out->fill_buf);
out->zero_buf = nullptr;
out->fill_buf = nullptr;
out->ops->close(out);
}