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