From c6131d4c607949a1a148e2e8e4b5d4076e6e3f35 Mon Sep 17 00:00:00 2001
From: Philippe Canal <pcanal@fnal.gov>
Date: Wed, 7 Dec 2016 09:40:47 -0600
Subject: [PATCH] Fix TObject cast error in TKey::ReadObjectAny method
 [ROOT-8495]

For all TObject-based classes pointer was inadvertently casted to TObject and return in
this form. But if TObject is not a first parent of the resquested class, the return value was wrong.
---
 io/io/src/TKey.cxx | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/io/io/src/TKey.cxx b/io/io/src/TKey.cxx
index b417eb59b8b..3039ae1b97e 100644
--- a/io/io/src/TKey.cxx
+++ b/io/io/src/TKey.cxx
@@ -1101,12 +1101,12 @@ void *TKey::ReadObjectAny(const TClass* expectedClass)
    }
 
    if (cl->IsTObject()) {
-      baseOffset = cl->GetBaseClassOffset(TObject::Class());
-      if (baseOffset==-1) {
+      auto tobjBaseOffset = cl->GetBaseClassOffset(TObject::Class());
+      if (tobjBaseOffset == -1) {
          Fatal("ReadObj","Incorrect detection of the inheritance from TObject for class %s.\n",
                fClassName.Data());
       }
-      TObject *tobj = (TObject*)( ((char*)pobj) +baseOffset);
+      TObject *tobj = (TObject*)( ((char*)pobj) + tobjBaseOffset);
 
       // See similar adjustments in ReadObj
       if (gROOT->GetForceStyle()) tobj->UseCurrentStyle();
-- 
GitLab