From 480332a35b52609c7cfd3018b3b9a0dd928590ce Mon Sep 17 00:00:00 2001 From: Rene Brun <Rene.Brun@cern.ch> Date: Fri, 7 Jul 2006 14:59:30 +0000 Subject: [PATCH] From Axel: In TClass::GetDataMember remove a limitation on the number of characters in the data member name git-svn-id: http://root.cern.ch/svn/root/trunk@15736 27541ba8-7e3a-0410-8455-c3a389f83636 --- meta/src/TClass.cxx | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/meta/src/TClass.cxx b/meta/src/TClass.cxx index 461846b6891..17ded682a8e 100644 --- a/meta/src/TClass.cxx +++ b/meta/src/TClass.cxx @@ -1,4 +1,4 @@ -// @(#)root/meta:$Name: $:$Id: TClass.cxx,v 1.192 2006/05/24 15:09:22 brun Exp $ +// @(#)root/meta:$Name: $:$Id: TClass.cxx,v 1.193 2006/06/28 10:03:13 pcanal Exp $ // Author: Rene Brun 07/01/95 /************************************************************************* @@ -1614,18 +1614,32 @@ TDataMember *TClass::GetDataMember(const char *datamember) const if (!fClassInfo) return 0; // Strip off leading *'s and trailing [ - char memb[64]; + const Int_t size_buffer = 256; + char memb[size_buffer]; char *s = (char*)datamember; while (*s == '*') s++; - strcpy(memb, s); - if ((s = strchr(memb, '['))) *s = 0; + + size_t len = strlen(s); + if (len > size_buffer - 2) + len = size_buffer - 2; + strncpy(memb, s, len); + memb[len] = 0; + + if ((s = strchr(memb, '['))) { + *s = 0; + len = strlen(memb); + } TDataMember *dm; TIter next(((TClass*)this)->GetListOfDataMembers()); while ((dm = (TDataMember *) next())) - if (strcmp(memb, dm->GetName()) == 0) - return dm; + if (len >= size_buffer - 2) { + if (strncmp(memb, dm->GetName(), len) == 0) + return dm; + } else + if (strcmp(memb, dm->GetName()) == 0) + return dm; return 0; } -- GitLab