From 2d026bf3272f632478c9d0ed9fe3cd6dfe0945a8 Mon Sep 17 00:00:00 2001
From: Markus Frank <Markus.Frank@cern.ch>
Date: Fri, 25 Nov 2022 12:24:31 +0100
Subject: [PATCH] Handle coverity defects

---
 DDDigi/src/DigiContainerCombine.cpp | 28 ++++++++++++++++------------
 DDDigi/src/DigiData.cpp             |  2 +-
 DDDigi/src/DigiStoreDump.cpp        |  2 +-
 3 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/DDDigi/src/DigiContainerCombine.cpp b/DDDigi/src/DigiContainerCombine.cpp
index a68e6f539..700c97c2d 100644
--- a/DDDigi/src/DigiContainerCombine.cpp
+++ b/DDDigi/src/DigiContainerCombine.cpp
@@ -103,12 +103,14 @@ public:
     for( std::size_t j=start; j < keys.size(); ++j )   {
       if ( keys[j].item() == key.item() )   {
 	DetectorHistory* next = std::any_cast<DetectorHistory>(work[j]);
-	std::string next_name = next->name;
-	cnt = (combine->m_erase_combined) ? out.merge(std::move(*next)) : out.insert(*next);
-	combine->info(format, thr, next_name.c_str(), keys[j].mask(), cnt, "histories"); 
-	used_keys_insert(keys[j]);
-	cnt_hist += cnt;
-	cnt_conts++;
+	if ( next )   {
+	  std::string next_name = next->name;
+	  cnt = (combine->m_erase_combined) ? out.merge(std::move(*next)) : out.insert(*next);
+	  combine->info(format, thr, next_name.c_str(), keys[j].mask(), cnt, "histories");
+	  used_keys_insert(keys[j]);
+	  cnt_hist += cnt;
+	  cnt_conts++;
+	}
       }
     }
     key.set_mask(combine->m_deposit_mask);
@@ -122,12 +124,14 @@ public:
     for( std::size_t j=start; j < keys.size(); ++j )   {
       if ( keys[j].item() == key.item() )   {
 	DetectorResponse* next = std::any_cast<DetectorResponse>(work[j]);
-	std::string next_name = next->name;
-	cnt = (combine->m_erase_combined) ? out.merge(std::move(*next)) : out.insert(*next);
-	combine->info(format, thr, next_name.c_str(), keys[j].mask(), cnt, "responses"); 
-	used_keys_insert(keys[j]);
-	cnt_response += cnt;
-	cnt_conts++;
+	if ( next )   {
+	  std::string next_name = next->name;
+	  cnt = (combine->m_erase_combined) ? out.merge(std::move(*next)) : out.insert(*next);
+	  combine->info(format, thr, next_name.c_str(), keys[j].mask(), cnt, "responses"); 
+	  used_keys_insert(keys[j]);
+	  cnt_response += cnt;
+	  cnt_conts++;
+	}
       }
     }
     key.set_mask(combine->m_deposit_mask);
diff --git a/DDDigi/src/DigiData.cpp b/DDDigi/src/DigiData.cpp
index bbe18cd3e..fc9b20771 100644
--- a/DDDigi/src/DigiData.cpp
+++ b/DDDigi/src/DigiData.cpp
@@ -450,7 +450,7 @@ void DataSegment::print_keys()   const   {
 
 /// Call on failed any-casts during data requests
 std::string DataSegment::invalid_cast(Key key, const std::type_info& type)  const   {
-  return dd4hep::format(0, "Invalid segment data cast. Key:%-32s %016lX -> %04X %04X %10ld type:%s",
+  return dd4hep::format(0, "Invalid segment data cast. Key:%-32s %016lX -> %04X %04X %08X type:%s",
 			Key::key_name(key).c_str(), key.value(), 
 			key.segment(), key.mask(), key.item(),
 			typeName(type).c_str());
diff --git a/DDDigi/src/DigiStoreDump.cpp b/DDDigi/src/DigiStoreDump.cpp
index d3144fae4..37f9e715c 100644
--- a/DDDigi/src/DigiStoreDump.cpp
+++ b/DDDigi/src/DigiStoreDump.cpp
@@ -167,7 +167,7 @@ DigiStoreDump::dump_history(DigiContext& context,
   std::vector<std::string> records;
 
   str << Key::key_name(container_key) << "[" << seq_no << "]:";
-  line = format("+----- %-30s Container: Segment:%04X Mask:%04X Item:%08X Cell:%016X Hist: Hits:%ld Parts:%ld",
+  line = format("+----- %-30s Container: Segment:%04X Mask:%04X Item:%08X Cell:%016lX Hist: Hits:%ld Parts:%ld",
 		str.str().c_str(), container_key.segment(), container_key.mask(), container_key.item(),
 		cell, history.hits.size(), history.particles.size());
   records.emplace_back(line);
-- 
GitLab