summaryrefslogtreecommitdiff
path: root/verity
diff options
context:
space:
mode:
authorGeQi <geqi@xiaomi.com>2023-10-16 17:43:53 +0800
committerGeQi <geqi@xiaomi.com>2023-10-17 09:05:54 +0800
commitc1be7dda2f2e9a4c68cdccb99c97b6156b2d771f (patch)
treeadcbf2027066eee6bda3a20af3e04a00da6ecad1 /verity
parentc6c3e0ba66d1523a22c5d40836498f927db72670 (diff)
downloadextras-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.cpp11
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;