diff --git a/core/meta/src/TMethodCall.cxx b/core/meta/src/TMethodCall.cxx index 52e7c0e5282caf4c5e44464dd86c63db912998de..5d2f2ad61c36f6d83baf3e229801cdcd020cbc9b 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 6e6596e33602032a846b4655399ec4408fa16113..01dbf587587964bb0427d1d3347512f8392e5fdb 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 db2a62484bdc4609f1cf2da58527401f6ad597e6..b13a12c0fb123757b480134842be13878b1355fb 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 7d3724a2ac67f99ef5862d4b50e763b3cadadcf9..21aedd834d0bb4f5bbf79ef9bf9afade2679643e 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 3903cd2b6b3e741d81961abe45b9ed1ce32d5315..9002b9668bc720127ae635af65c20b8d727f1122 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 da393ffdf8277d50313c6daeedbd7113653ffbed..62ee63a07d2b0cec7d91e7282cc1eeb2b89ab2bf 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 18891482b8b52890cfeb27ff6c6adf729f742f68..e5c7b17feeac3a6e3dc9e459161069198f722e8e 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 de140665910e38a5e12d3661e66ee142db355dd8..fd5c06334585f92c3523291572e81235f624b6a3 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 5e400fcbcdd0fc4b63998f474e40949b671bda3e..9063ad3050011a7d46376300bd2cd0e66259ca85 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 850c507fe0b2cd0d97a83f82e21566e9f7bca7ca..d5032da34d3a590b65da42ee7fc445ab335d9d76 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 93148327a481863f808b593df859a5c7def86826..9425b635f258b68306717e10d083c4e4d9453b6a 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 b4248b0f1bed6502e7973992baabf1ce1f519a30..0abe09837784988f3f174cf0608f5ebfce8db9a9 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);