parse-dynparts: coverity fixes 87/302787/1
authorJacek Kryszyn <j.kryszyn@samsung.com>
Wed, 13 Dec 2023 10:47:00 +0000 (11:47 +0100)
committerJacek Kryszyn <j.kryszyn@samsung.com>
Wed, 13 Dec 2023 10:55:14 +0000 (11:55 +0100)
Fixing parse-dynparts bugs/issues discoverd by coverity.

Change-Id: I4966c170e3db34c238f0f37c5271038bf650237d

src/parse-dynparts/lib.cpp
src/parse-dynparts/liblp/reader.cpp
src/parse-dynparts/main.cpp

index 6a1bb55ee31c4c0ecebc3b7072fe75744237fbf6..1981b054fc7dba70e680976b7368db5da868d346 100644 (file)
@@ -15,7 +15,7 @@ std::optional<std::string> go(const android::fs_mgr::LpMetadata &metadata, bool
   std::string table;
 
   // Code structure taken from Android's system/core/fs_mgr/fs_mgr_dm_linear.cpp
-  for (auto partition : metadata.partitions) {
+  for (const auto& partition : metadata.partitions) {
     if (!partition.num_extents) {
       messages << "Skipping zero-length logical partition: "
                << GetPartitionName(partition) << endl;
index f37ea0edef05f0d19e2527226c912f07f635a34a..4f291bea06680d35e243371eef01d9893735571e 100644 (file)
@@ -443,10 +443,12 @@ std::unique_ptr<LpMetadata> ReadMetadata(const std::string& super_partition, uin
 
     LpMetadataGeometry geometry;
     if (!ReadLogicalPartitionGeometry(fd, &geometry)) {
+        close(fd);
         return nullptr;
     }
     if (slot_number >= geometry.metadata_slot_count) {
         LERROR << __PRETTY_FUNCTION__ << " invalid metadata slot number";
+        close(fd);
         return nullptr;
     }
 
@@ -466,8 +468,11 @@ std::unique_ptr<LpMetadata> ReadMetadata(const std::string& super_partition, uin
         }
     }
     if (!metadata || !AdjustMetadataForSlot(metadata.get(), slot_number)) {
+        close(fd);
         return nullptr;
     }
+
+    close(fd);
     return metadata;
 }
 
index f60749ade45616b5e2aff0cf9865649a41d7d1a9..35fe9b541da07a0e1f91b1b19c4da648ec50b506 100644 (file)
@@ -17,7 +17,7 @@ using std::cout;
 using std::endl;
 
 int main(int argc, char* argv[]) {
-  if (argc < 2 || argc > 4 || (argc == 3 && std::string_view(argv[2]).compare("--list-tables"))) {
+  if (argc < 2 || argc > 3 || (argc == 3 && std::string_view(argv[2]).compare("--list-tables"))) {
     cerr << "Usage: dmsetup create --concise \"$(" << argv[0] << " device)\"" << endl
          << "Alternatively, you can use --list-tables option to get partitions tables line"
          << " by line which you can provide to dmsetup create."