Details
-
Bug
-
Resolution: Fixed
-
Critical
-
6.08/02
-
None
-
uname -a:
Linux ms03b 2.6.38 #19 SMP Tue Aug 14 09:15:44 CEST 2012 x86_64 x86_64 x86_64 GNU/LinuxROOTSYS=/cvmfs/sft.cern.ch/lcg/releases/LCG_87/ROOT/6.08.02/x86_64-slc6-gcc49-opt
Description
The function TClass::GetListOfAllPublicDataMembers returns a TViewPubDataMembers. Issuing TViewPubDataMembers::FindObject("dm") should return the pointer to the datamember named "dm" if it exists as public data member in the class or its base classes, and 0 otherwise. However, it returns a seemingly random pointer to another data member in case of inherited public data members, and also for arbitrary arguments. On the command line:
% root -n
// load some class object
root [0] cl = gROOT->GetClass("TNamed") (TClass *) 0x1263640
// normal, expected behavior for data members (inherited from TObject):
root [1] cl->GetListOfAllPublicDataMembers()->FindObject("kIsOnHeap")
(TObject *) 0x1efd400
root [2] cl->GetListOfAllPublicDataMembers()>FindObject("kIsOnHeap")>GetName()
(const char *) "kIsOnHeap"
// wrong pointer returned (also from TObject):
root [3] cl->GetListOfAllPublicDataMembers()->FindObject("kZombie")
(TObject *) 0x1f08fc0
root [4] cl->GetListOfAllPublicDataMembers()>FindObject("kZombie")>GetName()
(const char *) "kNotDeleted"
// this should definitely return a nullptr:
root [5] cl->GetListOfAllPublicDataMembers()->FindObject("foo_bar")
(TObject *) 0x1f13fe0
root [6] cl->GetListOfAllPublicDataMembers()>FindObject("foo_bar")>GetName()
(const char *) "kNoContextMenu"