From aad64578c1e0f8ccdd95ce9e30173671f31e4ee6 Mon Sep 17 00:00:00 2001 From: mmusich Date: Mon, 28 Mar 2022 11:21:10 +0200 Subject: [PATCH] get rid of more UB in TrackListMerger --- .../plugins/TrackListMerger.cc | 75 +++++++++++-------- 1 file changed, 44 insertions(+), 31 deletions(-) diff --git a/RecoTracker/FinalTrackSelectors/plugins/TrackListMerger.cc b/RecoTracker/FinalTrackSelectors/plugins/TrackListMerger.cc index fbe6a2e5db130..3be2d7e3db08a 100644 --- a/RecoTracker/FinalTrackSelectors/plugins/TrackListMerger.cc +++ b/RecoTracker/FinalTrackSelectors/plugins/TrackListMerger.cc @@ -38,6 +38,8 @@ class dso_hidden TrackListMerger : public edm::stream::EDProducer<> { void produce(edm::Event& e, const edm::EventSetup& c) override; private: + void returnEmptyCollections(edm::Event& e); + using MVACollection = std::vector; using QualityMaskCollection = std::vector; @@ -333,38 +335,9 @@ void TrackListMerger::produce(edm::Event& e, const edm::EventSetup& es) { } } - // output empty collections and early return if (trackColls.empty()) { - if (trkQualMod_) { - auto vm = std::make_unique>(); - e.put(std::move(vm)); - auto quals = std::make_unique(); - e.put(std::move(quals), "QualityMasks"); - } else { - auto outputTrks = std::make_unique(); - e.put(std::move(outputTrks)); - - if (makeReKeyedSeeds_) { - auto outputSeeds = std::make_unique(); - e.put(std::move(outputSeeds)); - } - - if (copyExtras_) { - auto outputTrkExtras = std::make_unique(); - auto outputTrkHits = std::make_unique(); - e.put(std::move(outputTrkExtras)); - e.put(std::move(outputTrkHits)); - } - - auto outputTrajs = std::make_unique>(); - outputTTAss = std::make_unique(); - e.put(std::move(outputTrajs)); - e.put(std::move(outputTTAss)); - } - auto vmMVA = std::make_unique>(); - e.put(std::move(vmMVA), "MVAVals"); - auto mvas = std::make_unique(); - e.put(std::move(mvas), "MVAValues"); + // output empty collections and early return + this->returnEmptyCollections(e); return; } @@ -378,6 +351,12 @@ void TrackListMerger::produce(edm::Event& e, const edm::EventSetup& es) { rSize += trackCollSizes[i]; } + if (rSize == 0) { + // output empty collections and early return + this->returnEmptyCollections(e); + return; + } + statCount.begin(rSize); // @@ -906,6 +885,40 @@ void TrackListMerger::produce(edm::Event& e, const edm::EventSetup& es) { } //end produce +void TrackListMerger::returnEmptyCollections(edm::Event& e) { + if (trkQualMod_) { + auto vm = std::make_unique>(); + e.put(std::move(vm)); + auto quals = std::make_unique(); + e.put(std::move(quals), "QualityMasks"); + } else { + auto outputTrks = std::make_unique(); + e.put(std::move(outputTrks)); + + if (makeReKeyedSeeds_) { + auto outputSeeds = std::make_unique(); + e.put(std::move(outputSeeds)); + } + + if (copyExtras_) { + auto outputTrkExtras = std::make_unique(); + auto outputTrkHits = std::make_unique(); + e.put(std::move(outputTrkExtras)); + e.put(std::move(outputTrkHits)); + } + + auto outputTrajs = std::make_unique>(); + outputTTAss = std::make_unique(); + e.put(std::move(outputTrajs)); + e.put(std::move(outputTTAss)); + } + auto vmMVA = std::make_unique>(); + e.put(std::move(vmMVA), "MVAVals"); + auto mvas = std::make_unique(); + e.put(std::move(mvas), "MVAValues"); + return; +} + #include "FWCore/PluginManager/interface/ModuleDef.h" #include "FWCore/Framework/interface/MakerMacros.h"