diff options
author | GeQi <geqi@xiaomi.com> | 2023-10-16 17:43:53 +0800 |
---|---|---|
committer | GeQi <geqi@xiaomi.com> | 2023-10-17 09:05:54 +0800 |
commit | c1be7dda2f2e9a4c68cdccb99c97b6156b2d771f (patch) | |
tree | adcbf2027066eee6bda3a20af3e04a00da6ecad1 /verity | |
parent | c6c3e0ba66d1523a22c5d40836498f927db72670 (diff) | |
download | extras-c1be7dda2f2e9a4c68cdccb99c97b6156b2d771f.tar.gz |
destroy file handle in error case
this issue was found by static analysis tool
Change-Id: Iecf4cc465bee236c9ce00704f9c53022fec52818
Signed-off-by: GeQi <geqi@xiaomi.com>
Diffstat (limited to 'verity')
-rw-r--r-- | verity/build_verity_tree.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/verity/build_verity_tree.cpp b/verity/build_verity_tree.cpp index 9edc81a1..e9df35c4 100644 --- a/verity/build_verity_tree.cpp +++ b/verity/build_verity_tree.cpp @@ -33,11 +33,11 @@ bool generate_verity_tree(const std::string& data_filename, return false; } - struct sparse_file* file; + std::unique_ptr<sparse_file, decltype(&sparse_file_destroy)> file(nullptr, sparse_file_destroy); if (sparse) { - file = sparse_file_import(data_fd, false, false); + file.reset(sparse_file_import(data_fd, false, false)); } else { - file = sparse_file_import_auto(data_fd, false, verbose); + file.reset(sparse_file_import_auto(data_fd, false, verbose)); } if (!file) { @@ -45,7 +45,7 @@ bool generate_verity_tree(const std::string& data_filename, return false; } - int64_t len = sparse_file_len(file, false, false); + int64_t len = sparse_file_len(file.get(), false, false); if (len % block_size != 0) { LOG(ERROR) << "file size " << len << " is not a multiple of " << block_size << " byte"; @@ -64,8 +64,7 @@ bool generate_verity_tree(const std::string& data_filename, ? 0 : 1; }; - sparse_file_callback(file, false, false, hash_callback, builder); - sparse_file_destroy(file); + sparse_file_callback(file.get(), false, false, hash_callback, builder); if (!builder->BuildHashTree()) { return false; |