diff --git a/tree/tree/src/TEntryList.cxx b/tree/tree/src/TEntryList.cxx index 78de65da2cd18..b1488fa02ffb5 100644 --- a/tree/tree/src/TEntryList.cxx +++ b/tree/tree/src/TEntryList.cxx @@ -1264,6 +1264,8 @@ void TEntryList::SetTree(const char *treename, const char *filename) elist->fBlocks = fBlocks; fBlocks = nullptr; elist->fNBlocks = fNBlocks; + elist->fLastIndexQueried = fLastIndexQueried; + elist->fLastIndexReturned = fLastIndexReturned; fLists->Add(elist); elist = new TEntryList("", "", treename, fn.Data()); if (elist->GetDirectory()) { diff --git a/tree/tree/test/chain_setentrylist.cxx b/tree/tree/test/chain_setentrylist.cxx index 1af7b027ba982..63613f5da3e11 100644 --- a/tree/tree/test/chain_setentrylist.cxx +++ b/tree/tree/test/chain_setentrylist.cxx @@ -158,3 +158,30 @@ TEST(TChain, SetEntryListSyncWrongNumberOfSubLists) { gSystem->Unlink(filename1); gSystem->Unlink(filename2); } + +TEST(TTree, SetEntryListPreUsed) +{ + // https://github.com/root-project/root/issues/13338 + // Define and fill an entry list + TEntryList entryList; + const std::vector entries{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; + for (long long int entry : entries) + entryList.Enter(entry); + // Read tree + TTree tree("t", "t"); + unsigned int x1; + tree.Branch("x1", &x1); + unsigned int NEntries = 100; + for (unsigned int iEntry = 0; iEntry < NEntries; iEntry++) { + x1 = iEntry; + tree.Fill(); + } + // On purpose get entry 15 before setting entry list for tree + entryList.GetEntry(15); + tree.SetEntryList(&entryList); + // Check results + for (long long int entry : entries) { + EXPECT_EQ(tree.GetEntryNumber(entry), entry); + EXPECT_EQ(tree.GetEntryNumber(entry), entry); + } +}