From 5e2d7a7754ef72f285b0fab0d6f7e8a3fa5459d8 Mon Sep 17 00:00:00 2001 From: Philippe Canal <pcanal@fnal.gov> Date: Tue, 1 Nov 2011 21:03:41 +0000 Subject: [PATCH] Fix medium impact coverity reports git-svn-id: http://root.cern.ch/svn/root/trunk@41697 27541ba8-7e3a-0410-8455-c3a389f83636 --- core/meta/src/TMethodCall.cxx | 6 ++++-- core/metautils/inc/TSchemaRuleProcessor.h | 4 ++-- core/metautils/src/RConversionRuleParser.cxx | 3 ++- core/rint/src/TTabCom.cxx | 2 +- io/dcache/src/TDCacheFile.cxx | 2 +- io/io/src/TMakeProject.cxx | 4 +++- io/io/src/TStreamerInfo.cxx | 13 +++++++++---- tree/tree/src/TBranchElement.cxx | 1 + tree/tree/src/TTree.cxx | 5 +++-- tree/tree/src/TTreeSQL.cxx | 16 +++++++++++----- tree/treeplayer/src/TSelectorDraw.cxx | 6 ++++-- tree/treeplayer/src/TSelectorEntries.cxx | 3 ++- 12 files changed, 43 insertions(+), 22 deletions(-) diff --git a/core/meta/src/TMethodCall.cxx b/core/meta/src/TMethodCall.cxx index 52e7c0e5282..5d2f2ad61c3 100644 --- a/core/meta/src/TMethodCall.cxx +++ b/core/meta/src/TMethodCall.cxx @@ -30,6 +30,7 @@ #include "TROOT.h" #include "Strlen.h" #include "TVirtualMutex.h" +#include "TError.h" ClassImp(TMethodCall) @@ -146,8 +147,9 @@ static TClass *R__FindScope(const char *function, UInt_t &pos, ClassInfo_t *cinf UInt_t nested = 0; for(int i=strlen(function); i>=0; --i) { switch(function[i]) { - case '<': --nested; break; - case '>': ++nested; break; + case '<': ++nested; break; + case '>': if (nested==0) { Error("TMethodCall R__FindScope","%s is not well formed function name",function); return 0; } + --nested; break; case ':': if (nested==0) { if (i>2 && function[i-1]==':') { diff --git a/core/metautils/inc/TSchemaRuleProcessor.h b/core/metautils/inc/TSchemaRuleProcessor.h index 6e6596e3360..01dbf587587 100644 --- a/core/metautils/inc/TSchemaRuleProcessor.h +++ b/core/metautils/inc/TSchemaRuleProcessor.h @@ -90,8 +90,8 @@ namespace ROOT // Take in consideration template names. for(std::string::size_type j=elem.size(); j>0; --j) { std::string::size_type i = j-1; - if (elem[i]=='<') { --level; } - else if (elem[i]=='>') { ++level; } + if (elem[i]=='<') { ++level; } + else if (elem[i]=='>') { if (level==0) { continue; } ; --level; } else if (level == 0 && isspace(elem[i])) { type = elem.substr( 0, i ); // At the first iteration we know we have a space. diff --git a/core/metautils/src/RConversionRuleParser.cxx b/core/metautils/src/RConversionRuleParser.cxx index db2a62484bd..b13a12c0fb1 100644 --- a/core/metautils/src/RConversionRuleParser.cxx +++ b/core/metautils/src/RConversionRuleParser.cxx @@ -47,7 +47,8 @@ namespace ROOT break; } case '<': ++level; break; - case '>': --level; break; + case '>': if (level==0) { return std::string::npos; } + --level; break; default: { // nothing to do } diff --git a/core/rint/src/TTabCom.cxx b/core/rint/src/TTabCom.cxx index 7d3724a2ac6..21aedd834d0 100644 --- a/core/rint/src/TTabCom.cxx +++ b/core/rint/src/TTabCom.cxx @@ -789,7 +789,7 @@ Char_t TTabCom::AllAgreeOnChar(int i, const TSeqCollection * pList, // just use the first one. next.Reset(); pObj = next(); - s = pObj->GetName(); + if (pObj) s = pObj->GetName(); break; } } diff --git a/io/dcache/src/TDCacheFile.cxx b/io/dcache/src/TDCacheFile.cxx index 3903cd2b6b3..9002b9668bc 100644 --- a/io/dcache/src/TDCacheFile.cxx +++ b/io/dcache/src/TDCacheFile.cxx @@ -286,7 +286,7 @@ Bool_t TDCacheFile::ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf total += len[j]; } - if ( high / total < 10 ) { + if ( total && high / total < 10 ) { char *temp = new char[high]; Seek(low); diff --git a/io/io/src/TMakeProject.cxx b/io/io/src/TMakeProject.cxx index da393ffdf82..62ee63a07d2 100644 --- a/io/io/src/TMakeProject.cxx +++ b/io/io/src/TMakeProject.cxx @@ -229,7 +229,7 @@ UInt_t TMakeProject::GenerateClassPrefix(FILE *fp, const char *clname, Bool_t to ++nest; break; case '>': - --nest; + if (nest) --nest; break; case ',': if (nest == 1) { @@ -364,6 +364,7 @@ void TMakeProject::GenerateMissingStreamerInfos(TList *extrainfos, const char *c if (nest == 1) last = i + 1; break; case '>': + if (nest == 0) return; // The name is not well formed, give up. --nest; /* intentional fall throught to the next case */ case ',': if ((clname[i] == ',' && nest == 1) || (clname[i] == '>' && nest == 0)) { @@ -443,6 +444,7 @@ UInt_t TMakeProject::GenerateIncludeForTemplate(FILE *fp, const char *clname, ch if (nest == 1) last = i + 1; break; case '>': + if (nest==0) return ninc; // the name is not well formed, give up. --nest; /* intentional fall throught to the next case */ case ',': if ((clname[i] == ',' && nest == 1) || (clname[i] == '>' && nest == 0)) { diff --git a/io/io/src/TStreamerInfo.cxx b/io/io/src/TStreamerInfo.cxx index 18891482b8b..e5c7b17feea 100644 --- a/io/io/src/TStreamerInfo.cxx +++ b/io/io/src/TStreamerInfo.cxx @@ -975,7 +975,8 @@ namespace { for (UInt_t i = oldlen, done = false, nest = 0; (i>0) && !done ; --i) { switch (oldClass->GetName()[i-1]) { case '>' : ++nest; break; - case '<' : --nest; break; + case '<' : if (nest==0) return kFALSE; // the name is not well formed, give up. + --nest; break; case ':' : if (nest == 0) oldname= &(oldClass->GetName()[i]); done = kTRUE; break; } } @@ -2600,6 +2601,7 @@ void TStreamerInfo::GenerateDeclaration(FILE *fp, FILE *sfp, const TList *subCla isTemplate = kTRUE; break; case '>': + if (nest == 0) { cur = len; continue; } // the name is not well formed, give up. --nest; break; case ':': { @@ -2996,15 +2998,18 @@ Int_t TStreamerInfo::GenerateHeaderFile(const char *dirname, const TList *subCla TString sourcename; sourcename.Form( "%s/%sProjectSource.cxx", dirname, gSystem->BaseName(dirname) ); FILE *sfp = fopen( sourcename.Data(), "a" ); - GenerateDeclaration(fp, sfp, subClasses); - + if (sfp) { + GenerateDeclaration(fp, sfp, subClasses); + } else { + Error("GenerateHeaderFile","Could not open %s for appending",sourcename.Data()); + } TMakeProject::GeneratePostDeclaration(fp, this, inclist); fprintf(fp,"#endif\n"); delete [] inclist; fclose(fp); - fclose(sfp); + if (sfp) fclose(sfp); return 1; } diff --git a/tree/tree/src/TBranchElement.cxx b/tree/tree/src/TBranchElement.cxx index de140665910..fd5c0633458 100644 --- a/tree/tree/src/TBranchElement.cxx +++ b/tree/tree/src/TBranchElement.cxx @@ -2854,6 +2854,7 @@ void TBranchElement::InitializeOffsets() // -- My parent's parent is not a top-level branch. // Remove the base class name suffix from the parent name. // Note: The pattern is the name of the base class. + // coverity[forward_null] branchElem is non zero here since fType==1 and thus fID > -1 TString pattern(branchElem->GetName()); if (pattern.Length() <= parentName.Length()) { if (!strcmp(parentName.Data() + (parentName.Length() - pattern.Length()), pattern.Data())) { diff --git a/tree/tree/src/TTree.cxx b/tree/tree/src/TTree.cxx index 5e400fcbcdd..9063ad30500 100644 --- a/tree/tree/src/TTree.cxx +++ b/tree/tree/src/TTree.cxx @@ -4066,7 +4066,7 @@ Int_t TTree::Fill() if (fAutoSave!=0 && fEntries >= fAutoSave) AutoSave(); // FlushBaskets not called in AutoSave if (gDebug > 0) Info("TTree::Fill","First AutoFlush. fAutoFlush = %lld, fAutoSave = %lld\n", fAutoFlush, fAutoSave); } - } else if (fNClusterRange && (fEntries-fClusterRangeEnd[fNClusterRange-1]) % fAutoFlush) { + } else if (fNClusterRange && fAutoFlush && (fEntries-fClusterRangeEnd[fNClusterRange-1]) % fAutoFlush) { if (fAutoSave != 0 && fEntries%fAutoSave == 0) { //We are at an AutoSave point. AutoSave flushes baskets and saves the Tree header AutoSave("flushbaskets"); @@ -4077,7 +4077,7 @@ Int_t TTree::Fill() if (gDebug > 0) Info("TTree::Fill","FlushBasket called at entry %lld, fZipBytes=%lld, fFlushedBytes=%lld\n",fEntries,fZipBytes,fFlushedBytes); } fFlushedBytes = fZipBytes; - } else if (fNClusterRange == 0 && fEntries > 1 && fEntries%fAutoFlush == 0) { + } else if (fNClusterRange == 0 && fEntries > 1 && fAutoFlush && fEntries%fAutoFlush == 0) { if (fAutoSave != 0 && fEntries%fAutoSave == 0) { //We are at an AutoSave point. AutoSave flushes baskets and saves the Tree header AutoSave("flushbaskets"); @@ -5900,6 +5900,7 @@ void TTree::OptimizeBaskets(ULong64_t maxMemory, Float_t minComp, Option_t *opti branch->SetCompressionSettings(0); } } + // coverity[divide_by_zero] newMemsize can not be zero as there is at least one leaf memFactor = Double_t(maxMemory)/Double_t(newMemsize); if (memFactor > 100) memFactor = 100; Double_t bmin_new = bmin*memFactor; diff --git a/tree/tree/src/TTreeSQL.cxx b/tree/tree/src/TTreeSQL.cxx index 850c507fe0b..d5032da34d3 100644 --- a/tree/tree/src/TTreeSQL.cxx +++ b/tree/tree/src/TTreeSQL.cxx @@ -257,6 +257,7 @@ Bool_t TTreeSQL::CheckTable(const TString &table) const if (fServer==0) return kFALSE; TSQLResult * tables = fServer->GetTables(fDB.Data(),table); + if (!tables) return kFALSE; TSQLRow * row = 0; while( (row = tables->Next()) ) { if(table.CompareTo(row->GetField(0),TString::kIgnoreCase)==0){ @@ -680,7 +681,7 @@ Long64_t TTreeSQL::GetEntries() const if (fServer==0) return GetEntriesFast(); if (!CheckTable(fTable.Data())) return 0; - TTreeSQL* thisvar = (TTreeSQL*)this; + TTreeSQL* thisvar = const_cast<TTreeSQL*>(this); // What if the user already started to call GetEntry // What about the initial value of fEntries is it really 0? @@ -691,10 +692,15 @@ Long64_t TTreeSQL::GetEntries() const if (count==0) { thisvar->fEntries = 0; } else { - TString val = count->Next()->GetField(0); - Long_t ret; - sscanf(val.Data(), "%ld",&(ret) ); - thisvar->fEntries = ret; + TSQLRow * row = count->Next(); + if (row) { + TString val = row->GetField(0); + Long_t ret; + sscanf(val.Data(), "%ld",&(ret) ); + thisvar->fEntries = ret; + } else { + thisvar->fEntries = 0; + } } return fEntries; } diff --git a/tree/treeplayer/src/TSelectorDraw.cxx b/tree/treeplayer/src/TSelectorDraw.cxx index 93148327a48..9425b635f25 100644 --- a/tree/treeplayer/src/TSelectorDraw.cxx +++ b/tree/treeplayer/src/TSelectorDraw.cxx @@ -114,8 +114,10 @@ void TSelectorDraw::Begin(TTree *tree) fDimension = 0; fAction = 0; - const char *varexp0 = fInput->FindObject("varexp")->GetTitle(); - const char *selection = fInput->FindObject("selection")->GetTitle(); + TObject *obj = fInput->FindObject("varexp"); + const char *varexp0 = obj ? obj->GetTitle() : ""; + obj = fInput->FindObject("selection"); + const char *selection = obj ? obj->GetTitle() : ""; const char *option = GetOption(); TString opt; diff --git a/tree/treeplayer/src/TSelectorEntries.cxx b/tree/treeplayer/src/TSelectorEntries.cxx index b4248b0f1be..0abe0983778 100644 --- a/tree/treeplayer/src/TSelectorEntries.cxx +++ b/tree/treeplayer/src/TSelectorEntries.cxx @@ -95,7 +95,8 @@ void TSelectorEntries::SlaveBegin(TTree *tree) SetStatus(0); fSelectedRows = 0; - const char *selection = fInput->FindObject("selection")->GetTitle(); + TObject *selectObj = fInput->FindObject("selection"); + const char *selection = selectObj ? selectObj->GetTitle() : ""; if (strlen(selection)) { fSelect = new TTreeFormula("Selection",selection,fChain); -- GitLab