diff --git a/io/io/src/TStreamerInfoActions.cxx b/io/io/src/TStreamerInfoActions.cxx index 329532f4bdf27..b30ef99dedae3 100644 --- a/io/io/src/TStreamerInfoActions.cxx +++ b/io/io/src/TStreamerInfoActions.cxx @@ -2491,7 +2491,8 @@ namespace TStreamerInfoActions static INLINE_TEMPLATE_ARGS Int_t LoopOverCollection(TBuffer &buf, void *start, const void *end, const TConfiguration *config) { for(void *iter = start; iter != end; iter = (char*)iter + sizeof(void*) ) { - action(buf, *(void**)iter, config); + if (*(void**)iter) + action(buf, *(void**)iter, config); } return 0; } diff --git a/io/io/test/TBufferFileTests.cxx b/io/io/test/TBufferFileTests.cxx index 30a5704d412fe..3d374c9ea0524 100644 --- a/io/io/test/TBufferFileTests.cxx +++ b/io/io/test/TBufferFileTests.cxx @@ -2,8 +2,12 @@ #include "TBufferFile.h" #include "TClass.h" +#include "TClonesArray.h" +#include "TObjString.h" #include #include +#include + // Tests ROOT-8367 TEST(TBufferFile, ROOT_8367) @@ -26,3 +30,20 @@ TEST(TBufferFile, ROOT_8367) EXPECT_FLOAT_EQ(v2[6], 7.); EXPECT_EQ(v2.size(), 7); } + +// https://its.cern.ch/jira/browse/ROOT-6788 +TEST(TBufferFile, ROOT_6788) +{ + TClonesArray clArray(TObjString::Class(), 100); + for (Int_t i=0; i<28; i++) { + new (clArray[i]) TObjString(); + } + TBufferFile buf(TBuffer::kWrite, 10000); + for (Int_t i=0; i<27; i++) { + delete clArray.RemoveAt(i); + } + buf.SetBufferOffset(0); + buf.MapObject(&clArray); + clArray.Streamer(buf); +} +