@@ -118,6 +118,44 @@ TEST(TFileMerger, MergeSingleOnlyListed)
118118 EXPECT_EQ (output->GetListOfKeys ()->GetSize (), 2 );
119119}
120120
121+ TEST (TFileMerger, OnlyListedNoSuffixLeak)
122+ {
123+ // Regression test for https://github.com/root-project/root/issues/22414:
124+ // keys whose names are a prefix or suffix of a listed key must not appear in the output.
125+ TMemFile src (" OnlyListedNoSuffixLeakSrc.root" , " CREATE" );
126+
127+ // "short" is a suffix of "long_short"; "long" is a prefix — both must be excluded.
128+ auto hLongShort = new TH1F (" long_short" , " long_short" , 1 , 0 , 2 );
129+ auto hShort = new TH1F (" short" , " short" , 1 , 0 , 2 );
130+ auto hLong = new TH1F (" long" , " long" , 1 , 0 , 2 );
131+ auto hUnrelated = new TH1F (" unrelated" , " unrelated" , 1 , 0 , 2 );
132+ for (auto h : {hLongShort, hShort, hLong, hUnrelated})
133+ h->SetDirectory (&src);
134+ src.Write ();
135+
136+ TFileMerger merger;
137+ auto output = std::unique_ptr<TFile>(new TFile (" OnlyListedNoSuffixLeak.root" , " RECREATE" ));
138+ ASSERT_TRUE (merger.OutputFile (std::move (output)));
139+
140+ merger.AddObjectNames (" long_short" ); // only this one should appear in output
141+ merger.AddFile (&src, false );
142+
143+ const Int_t mode = TFileMerger::kAll | TFileMerger::kRegular | TFileMerger::kOnlyListed ;
144+ ASSERT_TRUE (merger.PartialMerge (mode));
145+
146+ output = std::unique_ptr<TFile>(TFile::Open (" OnlyListedNoSuffixLeak.root" ));
147+ ASSERT_TRUE (output.get () && output->GetListOfKeys ());
148+
149+ // Exactly one key: "long_short". Suffix, prefix, and unrelated keys must be absent.
150+ EXPECT_EQ (output->GetListOfKeys ()->GetSize (), 1 );
151+ EXPECT_NE (output->Get (" long_short" ), nullptr );
152+ EXPECT_EQ (output->Get (" short" ), nullptr );
153+ EXPECT_EQ (output->Get (" long" ), nullptr );
154+ EXPECT_EQ (output->Get (" unrelated" ), nullptr );
155+ output->Close ();
156+ gSystem ->Unlink (" OnlyListedNoSuffixLeak.root" );
157+ }
158+
121159// https://github.com/root-project/root/issues/14558 aka https://its.cern.ch/jira/browse/ROOT-4716
122160TEST (TFileMerger, MergeBranches)
123161{
0 commit comments