From 7154c397ef064cddf6c0cbb208ee827cc3e65b9d Mon Sep 17 00:00:00 2001
From: Florian Uhlig <f.uhlig@gsi.de>
Date: Thu, 21 Dec 2023 13:50:46 +0100
Subject: [PATCH] Fix crashes in analysis tree converter

Add protections when tracking and/or track matching delivers strange results.
---
 .../common/analysis_tree_converter/CbmFsdHitsConverter.cxx   | 5 +++++
 .../common/analysis_tree_converter/CbmStsTracksConverter.cxx | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/analysis/common/analysis_tree_converter/CbmFsdHitsConverter.cxx b/analysis/common/analysis_tree_converter/CbmFsdHitsConverter.cxx
index 8e60ee5371..d00a4506e8 100644
--- a/analysis/common/analysis_tree_converter/CbmFsdHitsConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmFsdHitsConverter.cxx
@@ -266,6 +266,11 @@ void CbmFsdHitsConverter::ProcessData(CbmEvent* event)
 
     if ((bestMatchedIndex >= 0) && (bestChi2 > fsdgtrack_minChi2_) && (bestChi2 < fsdgtrack_maxChi2_)) {
       const auto trackIndex = event ? event->GetIndex(ECbmDataType::kGlobalTrack, bestMatchedIndex) : bestMatchedIndex;
+      if (trackIndex > cbm_global_tracks_->GetEntriesFast()) {
+        LOG(error) << "Trying to access element " << trackIndex << " which is out ot the global track array of size"
+                   << cbm_global_tracks_->GetEntriesFast();
+        continue;
+      }
       const auto* globalTrack   = static_cast<const CbmGlobalTrack*>(cbm_global_tracks_->At(trackIndex));
       FairTrackParam param_last = *(globalTrack->GetParamLast());
       FairTrackParam param_fsd  = ExtrapolateGtrack(hitZ, param_last);
diff --git a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
index 7af3a55011..eeadfa3dee 100644
--- a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
@@ -248,7 +248,7 @@ void CbmStsTracksConverter::MapTracks(CbmEvent* event)
   CbmTrackMatchNew* match {nullptr};
 
   int file_id {0}, event_id {0};
-  if (event && event->GetMatch()->GetNofLinks() > 0) {
+  if (event && event->GetMatch() && event->GetMatch()->GetNofLinks() > 0) {
     file_id  = event->GetMatch()->GetMatchedLink().GetFile();
     event_id = event->GetMatch()->GetMatchedLink().GetEntry();
   }
-- 
GitLab