Ho se ho fetile lilemo tse fetang tse peli ho tloha ha ho hlahlojoa khoutu ea ho qetela ea morero oa LLVM ho sebelisoa analyzer ea rona ea PVS-Studio. Ha re etse bonnete ba hore mohlahlobi oa PVS-Studio e ntse e le sesebelisoa se ka sehloohong sa ho tseba liphoso le bofokoli bo ka bang teng. Ho etsa sena, re tla hlahloba le ho fumana liphoso tse ncha tokollong ea LLVM 8.0.0.
Sehlooho se tla ngoloa
Ho bua 'nete, ke ne ke sa batle ho ngola sehlooho sena. Ha ho monate ho ngola ka morero oo re seng re o hlahlobile makhetlo a 'maloa (
Nako le nako ha mofuta o mocha oa LLVM o lokolloa kapa o ntlafatsoa
Bona, mofuta o mocha oa Clang Static Analyzer o ithutile ho fumana liphoso tse ncha! Ke bona eka bohlokoa ba ho sebelisa PVS-Studio bo ntse bo fokotseha. Clang o fumana liphoso tse ngata ho feta pele mme o ts'oara bokhoni ba PVS-Studio. U nahana'ng ka see?
Ho sena kamehla ke batla ho araba ntho e kang:
Le rona ha re lule re sa etse letho! Re ntlafalitse haholo bokhoni ba mohlahlobi oa PVS-Studio. Kahoo seke oa tšoenyeha, re tsoela pele ho etella pele joalo ka pele.
Ka bomalimabe, ena ke karabo e mpe. Ha ho na bopaki ho eona. Ke ka lebaka leo ke ngolang sehlooho sena hona joale. Kahoo, morero oa LLVM o boetse oa hlahlojoa 'me ho fumanoe liphoso tse fapaneng ho eona. Joale ke tla bonts'a tse neng li bonahala li khahla ho nna. Clang Static Analyzer ha e fumane liphoso tsena (kapa ho thata haholo ho etsa joalo ka thuso ea eona). Empa re ka khona. Ho feta moo, ke ile ka fumana le ho ngola liphoso tsena kaofela ka shoalane e le ’ngoe.
Empa ho ngola sehlooho seo ho ile ha nka libeke tse ’maloa. Ke ne ke sitoa ho itlhahisa ho beha tsena tsohle ka mongolo :).
Ka tsela, haeba u thahasella ho tseba hore na ho sebelisoa theknoloji efe ho PVS-Studio analyzer ho khetholla liphoso le bofokoli bo ka bang teng, joale ke fana ka tlhahiso ea ho tloaelana le sena.
Litlhahlobo tse ncha le tsa khale
Joalokaha ho se ho boletsoe, hoo e ka bang lilemo tse peli tse fetileng morero oa LLVM o ile oa hlahlojoa hape, 'me liphoso tse fumanoeng li ile tsa lokisoa. Joale sengoloa sena se tla hlahisa liphoso tse ncha. Ke hobane'ng ha ho ile ha fumanoa likokoana-hloko tse ncha? Ho na le mabaka a 3 a sena:
- Morero oa LLVM oa fetoha, o fetola khoutu ea khale mme o eketsa khoutu e ncha. Ka tlhaho, ho na le liphoso tse ncha ho khoutu e fetotsoeng le e ngotsoeng. Sena se bontša ka ho hlaka hore tlhahlobo e tsitsitseng e lokela ho sebelisoa kamehla, eseng ka linako tse ling. Lingoliloeng tsa rona li bonts'a hantle bokhoni ba mohlahlobi oa PVS-Studio, empa sena ha se amane le ho ntlafatsa boleng ba khoutu le ho fokotsa litšenyehelo tsa ho lokisa liphoso. Sebelisa static code analyzer kamehla!
- Re phethela le ho ntlafatsa litlhahlobo tse teng hona joale. Ka hona, mohlahlobi a ka tseba liphoso tseo a sa kang a li hlokomela nakong ea liteko tse fetileng.
- Litlhahlobo tse ncha li hlahile ho PVS-Studio e neng e le sieo lilemong tse 2 tse fetileng. Ke ile ka etsa qeto ea ho li totobatsa karolong e fapaneng ho bontša ka ho hlaka tsoelo-pele ea PVS-Studio.
Mefokolo e bonweng ka tlhahlobo e neng e le teng dilemong tse 2 tse fetileng
Sekhechana sa N1: Copy-Paste
static bool ShouldUpgradeX86Intrinsic(Function *F, StringRef Name) {
if (Name == "addcarryx.u32" || // Added in 8.0
....
Name == "avx512.mask.cvtps2pd.128" || // Added in 7.0
Name == "avx512.mask.cvtps2pd.256" || // Added in 7.0
Name == "avx512.cvtusi2sd" || // Added in 7.0
Name.startswith("avx512.mask.permvar.") || // Added in 7.0 // <=
Name.startswith("avx512.mask.permvar.") || // Added in 7.0 // <=
Name == "sse2.pmulu.dq" || // Added in 7.0
Name == "sse41.pmuldq" || // Added in 7.0
Name == "avx2.pmulu.dq" || // Added in 7.0
....
}
Tlhokomeliso ea PVS-Studio:
Ho hlahlojoa habeli hore lebitso le qala ka "avx512.mask.permvar". Chekeng ea bobeli, ho hlakile hore ba ne ba batla ho ngola ntho e 'ngoe, empa ba lebala ho lokisa taba e kopilitsoeng.
Sekhechana sa N2: Typo
enum CXNameRefFlags {
CXNameRange_WantQualifier = 0x1,
CXNameRange_WantTemplateArgs = 0x2,
CXNameRange_WantSinglePiece = 0x4
};
void AnnotateTokensWorker::HandlePostPonedChildCursor(
CXCursor Cursor, unsigned StartTokenIndex) {
const auto flags = CXNameRange_WantQualifier | CXNameRange_WantQualifier;
....
}
Tlhokomeliso ea PVS-Studio: V501 Ho na le lipoleloana tse tšoanang 'CXNameRange_WantQualifier' ka ho le letšehali le ka ho le letona la '|' mosebeletsi. CIndex.cpp 7245
Ka lebaka la typo, e tšoanang e bitsoang constant e sebelisoa habeli CXNameRange_WantQualifier.
Sekhechana sa N3: Pherekano le boetapele ba opareitara
int PPCTTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index) {
....
if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian() ? 1 : 0)
return 0;
....
}
Tlhokomeliso ea PVS-Studio:
Ka maikutlo a ka, ena ke phoso e ntle haholo. E, kea tseba hore ke na le maikutlo a makatsang ka botle :).
Jwale, ho latela
(ISD == ISD::EXTRACT_VECTOR_ELT && (Index == ST->isLittleEndian())) ? 1 : 0
Ho latela pono e sebetsang, boemo bo joalo ha bo utloahale, kaha bo ka fokotsoa ho:
(ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian())
Ena ke phoso e hlakileng. Mohlomong, ba ne ba batla ho bapisa 0/1 le phapang Index. Ho lokisa khoutu o hloka ho kenya masakaneng ho potoloha opareitara ea ternary:
if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == (ST->isLittleEndian() ? 1 : 0))
Ka tsela, opereishene ea ternary e kotsi haholo mme e baka liphoso tse utloahalang. E-ba hlokolosi haholo ka eona 'me u se ke ua ba meharo ka masakaneng. Ke ile ka sheba sehlooho sena ka botlalo
Sekhechana sa N4, N5: Sesupa se se nang thuso
Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
....
TypedInit *LHS = dyn_cast<TypedInit>(Result);
....
LHS = dyn_cast<TypedInit>(
UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get())
->Fold(CurRec));
if (!LHS) {
Error(PasteLoc, Twine("can't cast '") + LHS->getAsString() +
"' to string");
return nullptr;
}
....
}
Tlhokomeliso ea PVS-Studio:
Haeba pointer LHS ha e na thuso, ho lokela hore ho fanoe ka temoso. Leha ho le joalo, ho e-na le hoo, eona null pointer e tla hlakoloa: LHS->getAsString().
Ena ke boemo bo tloaelehileng haholo ha phoso e patiloe ho motho ea sebetsanang le liphoso, kaha ha ho motho ea ba lekang. Bahlahlobisisi ba tsitsitseng ba hlahloba khoutu eohle e fumanehang, ho sa tsotellehe hore na e sebelisoa hangata hakae. Ona ke mohlala o motle haholo oa hore na tlhahlobo e tsitsitseng e tlatsana joang le liteko tse ling le mekhoa ea ho sireletsa liphoso.
Phoso e ts'oanang ea ho sebetsana le pointer RHS e lumelletsoe khoutung e ka tlase feela: V522 [CWE-476] Ho khelosoa ha 'RHS' ho ka etsahala. TGParser.cpp 2186
Fragment N6: Ho sebelisa pointer ka mor'a ho falla
static Expected<bool>
ExtractBlocks(....)
{
....
std::unique_ptr<Module> ProgClone = CloneModule(BD.getProgram(), VMap);
....
BD.setNewProgram(std::move(ProgClone)); // <=
MiscompiledFunctions.clear();
for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first); // <=
assert(NewF && "Function not found??");
MiscompiledFunctions.push_back(NewF);
}
....
}
Tlhokomeliso ea PVS-Studio: V522 [CWE-476] Ho kheloha ha "ProgClone" ea null pointer ho ka etsahala. Miscompilation.cpp 601
Qalong sesupa se bohlale ProgClone e khaotsa ho ba mong'a ntho eo:
BD.setNewProgram(std::move(ProgClone));
Ha e le hantle, hona joale ProgClone ke sesupa sa lefeela. Ka hona, null pointer dereference e lokela ho hlaha ka tlase mona:
Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first);
Empa, bonneteng, sena se ke ke sa etsahala! Hlokomela hore loop ha e hlile ha e sebetse.
Qalong ea setshelo MiscompiledFunctions hlakotsoe:
MiscompiledFunctions.clear();
Ka mor'a moo, boholo ba setshelo sena bo sebelisoa maemong a loop:
for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
Ho bonolo ho bona hore loop ha e qale. Ke nahana hore sena le sona ke phoso mme khoutu e lokela ho ngoloa ka tsela e fapaneng.
Ho bonahala eka re kopane le liphoso tseo tse tsebahalang! Phoso e 'ngoe e pata e' ngoe :).
Fragment N7: Ho sebelisa pointer ka mor'a ho falla
static Expected<bool> TestOptimizer(BugDriver &BD, std::unique_ptr<Module> Test,
std::unique_ptr<Module> Safe) {
outs() << " Optimizing functions being tested: ";
std::unique_ptr<Module> Optimized =
BD.runPassesOn(Test.get(), BD.getPassesToRun());
if (!Optimized) {
errs() << " Error running this sequence of passes"
<< " on the input program!n";
BD.setNewProgram(std::move(Test)); // <=
BD.EmitProgressBitcode(*Test, "pass-error", false); // <=
if (Error E = BD.debugOptimizerCrash())
return std::move(E);
return false;
}
....
}
Tlhokomeliso ea PVS-Studio: V522 [CWE-476] Ho khelosoa ha "Teko" ea null pointer ho ka etsahala. Miscompilation.cpp 709
Boemo bo tšoanang hape. Qalong, litaba tsa ntho eo lia sisinyeha, ebe joale li sebelisoa joalokaha eka ha ho letho le etsahetseng. Ke bona boemo bona khafetsa ho khoutu ea lenaneo kamora hore semantics ea motsamao e hlahe ho C ++. Ke kahoo ke ratang puo ea C++! Ho na le mekhoa e mecha ea ho ithunya leoto la hau. PVS-Studio analyzer e tla lula e na le mosebetsi :).
Sekhechana sa N8: Sesupa se se nang thuso
void FunctionDumper::dump(const PDBSymbolTypeFunctionArg &Symbol) {
uint32_t TypeId = Symbol.getTypeId();
auto Type = Symbol.getSession().getSymbolById(TypeId);
if (Type)
Printer << "<unknown-type>";
else
Type->dump(*this);
}
Tlhokomeliso ea PVS-Studio: V522 [CWE-476] Ho kheloha ha "Mofuta" oa null pointer ho ka etsahala. PrettyFunctionDumper.cpp 233
Ntle le ho sebetsana le liphoso, mesebetsi ea khatiso ea ho lokisa liphoso hangata ha e lekoe. Re na le nyeoe e joalo ka pel'a rona. Mosebetsi o emetse mosebedisi, eo, ho e-na le ho rarolla mathata a hae, a tla qobelloa ho e lokisa.
E nepahetse:
if (Type)
Type->dump(*this);
else
Printer << "<unknown-type>";
Sekhechana sa N9: Sesupa se se nang thuso
void SearchableTableEmitter::collectTableEntries(
GenericTable &Table, const std::vector<Record *> &Items) {
....
RecTy *Ty = resolveTypes(Field.RecType, TI->getType());
if (!Ty) // <=
PrintFatalError(Twine("Field '") + Field.Name + "' of table '" +
Table.Name + "' has incompatible type: " +
Ty->getAsString() + " vs. " + // <=
TI->getType()->getAsString());
....
}
Tlhokomeliso ea PVS-Studio: V522 [CWE-476] Ho kheloha ha "Ty" ea null pointer ho ka etsahala. SearchableTableEmitter.cpp 614
Ke nahana hore tsohle li hlakile ebile ha li hloke tlhaloso.
Sekhechana sa N10: Typo
bool FormatTokenLexer::tryMergeCSharpNullConditionals() {
....
auto &Identifier = *(Tokens.end() - 2);
auto &Question = *(Tokens.end() - 1);
....
Identifier->ColumnWidth += Question->ColumnWidth;
Identifier->Type = Identifier->Type; // <=
Tokens.erase(Tokens.end() - 1);
return true;
}
Tlhokomeliso ea PVS-Studio:
Ha ho na thuso ea ho fana ka phetoho ho eona. Ho ka etsahala hore ebe ba ne ba batla ho ngola:
Identifier->Type = Question->Type;
Sekhechana sa N11: Phomolo e belaetsang
void SystemZOperand::print(raw_ostream &OS) const {
switch (Kind) {
break;
case KindToken:
OS << "Token:" << getToken();
break;
case KindReg:
OS << "Reg:" << SystemZInstPrinter::getRegisterName(getReg());
break;
....
}
Tlhokomeliso ea PVS-Studio:
Ho na le motho ea belaetsang haholo qalong khefu. Na u lebetse ho ngola se seng mona?
Fragment N12: Ho hlahloba sesupo ka mor'a ho kheloha
InlineCost AMDGPUInliner::getInlineCost(CallSite CS) {
Function *Callee = CS.getCalledFunction();
Function *Caller = CS.getCaller();
TargetTransformInfo &TTI = TTIWP->getTTI(*Callee);
if (!Callee || Callee->isDeclaration())
return llvm::InlineCost::getNever("undefined callee");
....
}
Tlhokomeliso ea PVS-Studio:
Sekhombi Callee qalong e qheletsoe ka thoko ka nako eo mosebetsi o bitsoang ka eona fumanaTTI.
'Me joale ho hlaha hore pointer ena e lokela ho hlahlojoa ho lekana nullptr:
if (!Callee || Callee->isDeclaration())
Empa nako e se e le morao haholo...
Fragment N13 - N...: Ho hlahloba sesupo ka mor'a ho kheloha
Boemo boo ho buuoeng ka bona karolong e fetileng ea khoutu ha bo ikhethang. E hlaha mona:
static Value *optimizeDoubleFP(CallInst *CI, IRBuilder<> &B,
bool isBinary, bool isPrecise = false) {
....
Function *CalleeFn = CI->getCalledFunction();
StringRef CalleeNm = CalleeFn->getName(); // <=
AttributeList CalleeAt = CalleeFn->getAttributes();
if (CalleeFn && !CalleeFn->isIntrinsic()) { // <=
....
}
Tlhokomeliso ea PVS-Studio: V595 [CWE-476] 'CalleeFn' pointer e sebelisitsoe pele e netefatsoa khahlanong le nullptr. Sheba mela: 1079, 1081. SimplifyLibCalls.cpp 1079
Mme mona:
void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
const Decl *Tmpl, Decl *New,
LateInstantiatedAttrVec *LateAttrs,
LocalInstantiationScope *OuterMostScope) {
....
NamedDecl *ND = dyn_cast<NamedDecl>(New);
CXXRecordDecl *ThisContext =
dyn_cast_or_null<CXXRecordDecl>(ND->getDeclContext()); // <=
CXXThisScopeRAII ThisScope(*this, ThisContext, Qualifiers(),
ND && ND->isCXXInstanceMember()); // <=
....
}
Tlhokomeliso ea PVS-Studio: V595 [CWE-476] 'ND' pointer e sebelisitsoe pele e netefatsoa khahlanong le nullptr. Sheba mela: 532, 534. SemaTemplateInstantiateDecl.cpp 532
Mme mona:
- V595 [CWE-476] 'U' pointer e ile ea sebelisoa pele e netefatsoa khahlanong le nullptr. Sheba mela: 404, 407. DWARFormValue.cpp 404
- V595 [CWE-476] Sesupa sa 'ND' se ile sa sebelisoa pele se netefatsoa khahlano le nullptr. Sheba mela: 2149, 2151. SemaTemplateInstantiate.cpp 2149
Eaba ke se ke sa thahaselle ho ithuta litemoso tse nang le nomoro ea V595. Kahoo ha ke tsebe hore na ho na le liphoso tse ling tse tšoanang ntle le tse thathamisitsoeng mona. Ho ka etsahala hore ebe ho na le.
Sekhechana sa N17, N18: Phetoho e belaetsang
static inline bool processLogicalImmediate(uint64_t Imm, unsigned RegSize,
uint64_t &Encoding) {
....
unsigned Size = RegSize;
....
uint64_t NImms = ~(Size-1) << 1;
....
}
Tlhokomeliso ea PVS-Studio:
E kanna ea se be phoso mme khoutu e sebetsa hantle joalo ka ha e reriloe. Empa ho hlakile hore sena ke sebaka se belaetsang haholo 'me se hloka ho hlahlojoa.
Ha re re e feto-fetohang Size e lekana le 16, 'me joale mongoli oa khoutu o rerile ho e fumana ka ho feto-fetoha Nmms moelelo:
1111111111111111111111111111111111111111111111111111111111100000
Leha ho le joalo, ha e le hantle sephetho e tla ba:
0000000000000000000000000000000011111111111111111111111111100000
'Nete ke hore lipalo tsohle li etsahala ho sebelisoa mofuta o sa ngolisoang oa 32-bit. Ke ka nako eo feela, mofuta ona o sa ngolisoang oa 32-bit o tla atolosoa ka mokhoa o hlakileng nthabeleng. Tabeng ena, likarolo tsa bohlokoa ka ho fetisisa e tla ba zero.
U ka lokisa boemo ka tsela ena:
uint64_t NImms = ~static_cast<uint64_t>(Size-1) << 1;
Boemo bo ts'oanang: V629 [CWE-190] Nahana ka ho hlahloba polelo ea 'Immr << 6'. Phetoho e nyane ea boleng ba 32-bit le katoloso e latelang ho mofuta oa 64-bit. AArch64AddressingModes.h 269
Sekhechana sa N19: Lentsoe la sehlooho le sieo hape?
void AMDGPUAsmParser::cvtDPP(MCInst &Inst, const OperandVector &Operands) {
....
if (Op.isReg() && Op.Reg.RegNo == AMDGPU::VCC) {
// VOP2b (v_add_u32, v_sub_u32 ...) dpp use "vcc" token.
// Skip it.
continue;
} if (isRegOrImmWithInputMods(Desc, Inst.getNumOperands())) { // <=
Op.addRegWithFPInputModsOperands(Inst, 2);
} else if (Op.isDPPCtrl()) {
Op.addImmOperands(Inst, 1);
} else if (Op.isImm()) {
// Handle optional arguments
OptionalIdx[Op.getImmTy()] = I;
} else {
llvm_unreachable("Invalid operand type");
}
....
}
Tlhokomeliso ea PVS-Studio:
Haho phoso mona. Ho tloha ka nako eo-block ea pele if e qetella ka tsoela pele, joale ha ho na taba, ho na le keyword hape kapa eseng joalo. Ka tsela efe kapa efe khoutu e tla sebetsa joalo. Ke ntse ke fositse hape e etsa hore khoutu e se hlaka le ho ba kotsi. Haeba nakong e tlang tsoela pele e nyamela, khoutu e tla qala ho sebetsa ka tsela e fapaneng ka ho feletseng. Ka maikutlo a ka ho molemo ho eketsa hape.
Fragment N20: Mefuta e mene ea mofuta o le mong
LLVM_DUMP_METHOD void Symbol::dump(raw_ostream &OS) const {
std::string Result;
if (isUndefined())
Result += "(undef) ";
if (isWeakDefined())
Result += "(weak-def) ";
if (isWeakReferenced())
Result += "(weak-ref) ";
if (isThreadLocalValue())
Result += "(tlv) ";
switch (Kind) {
case SymbolKind::GlobalSymbol:
Result + Name.str(); // <=
break;
case SymbolKind::ObjectiveCClass:
Result + "(ObjC Class) " + Name.str(); // <=
break;
case SymbolKind::ObjectiveCClassEHType:
Result + "(ObjC Class EH) " + Name.str(); // <=
break;
case SymbolKind::ObjectiveCInstanceVariable:
Result + "(ObjC IVar) " + Name.str(); // <=
break;
}
OS << Result;
}
Litemoso tsa PVS-Studio:
- V655 [CWE-480] Likhoele li ne li kopantsoe empa ha li sebelisoe. Nahana ka ho hlahloba polelo ea 'Result + Name.str()'. Letšoao.cpp 32
- V655 [CWE-480] Likhoele li ne li kopantsoe empa ha li sebelisoe. Nahana ka ho hlahloba polelo ea 'Result + "(ObjC Class)" + Name.str()'. Letšoao.cpp 35
- V655 [CWE-480] Likhoele li ne li kopantsoe empa ha li sebelisoe. Nahana ka ho hlahloba polelo ea 'Result + "(ObjC Class EH) " + Name.str()'. Letšoao.cpp 38
- V655 [CWE-480] Likhoele li ne li kopantsoe empa ha li sebelisoe. Nahana ka ho hlahloba polelo ea 'Result + "(ObjC IVar)" + Name.str()'. Letšoao.cpp 41
Ka phoso, ho sebelisoa +=opareitara sebakeng sa +=opareitara. Phello ke meralo e se nang moelelo.
Fragment N21: Boitšoaro bo sa hlalosoang
static void getReqFeatures(std::map<StringRef, int> &FeaturesMap,
const std::vector<Record *> &ReqFeatures) {
for (auto &R : ReqFeatures) {
StringRef AsmCondString = R->getValueAsString("AssemblerCondString");
SmallVector<StringRef, 4> Ops;
SplitString(AsmCondString, Ops, ",");
assert(!Ops.empty() && "AssemblerCondString cannot be empty");
for (auto &Op : Ops) {
assert(!Op.empty() && "Empty operator");
if (FeaturesMap.find(Op) == FeaturesMap.end())
FeaturesMap[Op] = FeaturesMap.size();
}
}
}
Leka ho fumana khoutu e kotsi ka bouena. 'Me sena ke setšoantšo se ka sitisang tlhokomelo e le hore u se ke ua sheba karabo hang-hang:
Tlhokomeliso ea PVS-Studio:
Tsela ea bothata:
FeaturesMap[Op] = FeaturesMap.size();
Haeba element Op ha e fumanehe, ebe ntho e ncha e etsoa 'mapeng' me palo ea likarolo tse 'mapeng ona e ngotsoe moo. Ha ho tsejoe feela hore na mosebetsi o tla bitsoa boholo pele kapa ka mora ho kenya elemente e ncha.
Sekhechana sa N22-N24: Likabelo tse phetoang
Error MachOObjectFile::checkSymbolTable() const {
....
} else {
MachO::nlist STE = getSymbolTableEntry(SymDRI);
NType = STE.n_type; // <=
NType = STE.n_type; // <=
NSect = STE.n_sect;
NDesc = STE.n_desc;
NStrx = STE.n_strx;
NValue = STE.n_value;
}
....
}
Tlhokomeliso ea PVS-Studio:
Ha ke nahane hore ho na le phoso ea sebele mona. Kabelo feela e sa hlokahaleng khafetsa. Empa e ntse e le phoso.
Ka mokhoa o ts'oanang:
- V519 [CWE-563] Mofuta oa 'B.NDesc' o abeloa litekanyetso habeli ka tatellano. Mohlomong sena ke phoso. Sheba mela: 1488, 1489. llvm-nm.cpp 1489
- V519 [CWE-563] Phapang e abeloa litekanyetso habeli ka tatellano. Mohlomong sena ke phoso. Sheba mela: 59, 61. coff2yaml.cpp 61
Fragment N25-N27: Likabelo tse ling hape
Joale a re shebeng mofuta o fapaneng hanyane oa reassignment.
bool Vectorizer::vectorizeLoadChain(
ArrayRef<Instruction *> Chain,
SmallPtrSet<Instruction *, 16> *InstructionsProcessed) {
....
unsigned Alignment = getAlignment(L0);
....
unsigned NewAlign = getOrEnforceKnownAlignment(L0->getPointerOperand(),
StackAdjustedAlignment,
DL, L0, nullptr, &DT);
if (NewAlign != 0)
Alignment = NewAlign;
Alignment = NewAlign;
....
}
Tlhokomeliso ea PVS-Studio: V519 [CWE-563] Phapang ea 'Alignment' e abeloa litekanyetso habeli ka tatellano. Mohlomong sena ke phoso. Sheba mela: 1158, 1160. LoadStoreVectorizer.cpp 1160
Ena ke khoutu e makatsang haholo eo ho hlakileng hore e na le phoso e utloahalang. Qalong, fetoha lolamisiwa boleng bo abeloa ho latela maemo. 'Me joale kabelo e etsahala hape, empa joale ntle le cheke.
Maemo a tšoanang a ka bonoa mona:
- V519 [CWE-563] Phapang ea 'Effects' e abeloa litekanyetso habeli ka tatellano. Mohlomong sena ke phoso. Sheba mela: 152, 165. WebAssemblyRegStackify.cpp 165
- V519 [CWE-563] Mofuta oa 'ExpectNoDerefChunk' o abeloa litekanyetso habeli ka tatellano. Mohlomong sena ke phoso. Sheba mela: 4970, 4973. SemaType.cpp 4973
Fragment N28: Boemo ba 'nete kamehla
static int readPrefixes(struct InternalInstruction* insn) {
....
uint8_t byte = 0;
uint8_t nextByte;
....
if (byte == 0xf3 && (nextByte == 0x88 || nextByte == 0x89 ||
nextByte == 0xc6 || nextByte == 0xc7)) {
insn->xAcquireRelease = true;
if (nextByte != 0x90) // PAUSE instruction support // <=
break;
}
....
}
Tlhokomeliso ea PVS-Studio:
Ho hlahloba ha ho utloahale. E fetohang latelangByte kamehla ha e lekane le boleng 0x90, e latelang ho tsoa cheke e fetileng. Ena ke mofuta o itseng oa phoso e utloahalang.
Fragment N29 - N...: Maemo a kamehla a nnete/a bohata
Analyzer e fana ka litemoso tse ngata tsa hore boemo bohle (
static DecodeStatus DecodeGPRPairRegisterClass(MCInst &Inst, unsigned RegNo,
uint64_t Address, const void *Decoder) {
DecodeStatus S = MCDisassembler::Success;
if (RegNo > 13)
return MCDisassembler::Fail;
if ((RegNo & 1) || RegNo == 0xe)
S = MCDisassembler::SoftFail;
....
}
Tlhokomeliso ea PVS-Studio:
0xE ea kamehla ke boleng ba 14 ho decimal. Tlhahlobo RegNo == 0xe ha e utloahale hobane haeba RegNo> 13, joale ts'ebetso e tla phethela ts'ebetso ea eona.
Ho bile le litemoso tse ling tse ngata ka li-ID V547 le V560, empa joalo ka
Ke tla u fa mohlala oa hore na ke hobane'ng ha ho ithuta lintho tse susumetsang tsena ho tena. Analyzer e nepahetse ka ho feletseng ha e fana ka temoso bakeng sa khoutu e latelang. Empa sena hase phoso.
bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons,
tok::TokenKind ClosingBraceKind) {
bool HasError = false;
....
HasError = true;
if (!ContinueOnSemicolons)
return !HasError;
....
}
Tlhokomeliso ea PVS-Studio: V547 [CWE-570] Expression '!HasError' e lula e le leshano. UnwrappedLineParser.cpp 1635
Fragment N30: Ho khutla ho belaetsang
static bool
isImplicitlyDef(MachineRegisterInfo &MRI, unsigned Reg) {
for (MachineRegisterInfo::def_instr_iterator It = MRI.def_instr_begin(Reg),
E = MRI.def_instr_end(); It != E; ++It) {
return (*It).isImplicitDef();
}
....
}
Tlhokomeliso ea PVS-Studio:
Ena ke phoso kapa mokhoa o itseng o reretsoeng ho hlalosetsa baetsi ba mananeo ba balang khoutu. Moralo ona ha o ntlhalosetse letho mme o shebahala o belaela haholo. Ho molemo hore u se ke ua ngola joalo :).
O khathetse? Joale ke nako ea ho etsa tee kapa kofi.
Mefokolo e khetholloang ke litlhahlobo tse ncha
Ke nahana hore ts'ebetso ea 30 ea tlhahlobo ea khale e lekane. Ha re boneng hore na ke lintho life tse khahlisang tse ka fumanoang ka tlhahlobo e ncha e hlahileng ho analyzer kamora moo
Sekhechana sa N31: Khoutu e sa fihlelleheng
Error CtorDtorRunner::run() {
....
if (auto CtorDtorMap =
ES.lookup(JITDylibSearchList({{&JD, true}}), std::move(Names),
NoDependenciesToRegister, true))
{
....
return Error::success();
} else
return CtorDtorMap.takeError();
CtorDtorsByPriority.clear();
return Error::success();
}
Tlhokomeliso ea PVS-Studio:
Joalokaha u ka bona, makala ka bobeli a opareitara if e qetella ka mohala o yang ho opareitara khutlele. Ka lebaka leo, setshelo CtorDtorsByPriority e ke ke ea hlakoloa.
Sekhechana sa N32: Khoutu e sa fihlelleheng
bool LLParser::ParseSummaryEntry() {
....
switch (Lex.getKind()) {
case lltok::kw_gv:
return ParseGVEntry(SummaryID);
case lltok::kw_module:
return ParseModuleEntry(SummaryID);
case lltok::kw_typeid:
return ParseTypeIdEntry(SummaryID); // <=
break; // <=
default:
return Error(Lex.getLoc(), "unexpected summary kind");
}
Lex.setIgnoreColonInIdentifiers(false); // <=
return false;
}
Tlhokomeliso ea PVS-Studio: V779 [CWE-561] Khoutu e sa fihlelleheng e fumanoe. Ho ka etsahala hore ebe phoso e teng. LLParser.cpp 835
Boemo bo khahlisang. Ha re shebeng sebaka sena pele:
return ParseTypeIdEntry(SummaryID);
break;
Ha u sheba ka lekhetlo la pele, ho bonahala eka ha ho na phoso mona. E shebahala joaloka opareitara khefu ho na le e 'ngoe mona,' me u ka e hlakola feela. Leha ho le joalo, hase bohle ba bonolo hakaalo.
Analyzer e fana ka temoso meleng:
Lex.setIgnoreColonInIdentifiers(false);
return false;
'Me ka sebele, khoutu ena ha e fumanehe. Linyeoe tsohle ka fapoha e qetella ka mohala o tsoang ho opareitara khutlele. 'Me joale ke se nang kelello feela khefu ha e shebahale e se kotsi hakaalo! Mohlomong e 'ngoe ea makala e lokela ho fela ka khefu, eseng on khutlele?
Fragment N33: Ho tsosolosa ka tšohanyetso ha likotoana tse phahameng
unsigned getStubAlignment() override {
if (Arch == Triple::systemz)
return 8;
else
return 1;
}
Expected<unsigned>
RuntimeDyldImpl::emitSection(const ObjectFile &Obj,
const SectionRef &Section,
bool IsCode) {
....
uint64_t DataSize = Section.getSize();
....
if (StubBufSize > 0)
DataSize &= ~(getStubAlignment() - 1);
....
}
Tlhokomeliso ea PVS-Studio:
Ka kopo hlokomela hore ts'ebetso getStubAlignment mofuta oa ho khutlisa E sa ngolisoeng. Ha re bale boleng ba polelo, re nka hore mosebetsi o khutlisa boleng ba 8:
~(getStubAlignment() - 1)
~(8u-1)
0xFFFFFFFF8u
Joale hlokomela hore ho feto-fetoha DataSize e na le mofuta o sa ngolisoang oa 64-bit. Hoa etsahala hore ha o etsa ts'ebetso ea DataSize & 0xFFFFFFF8u, likotoana tsohle tse mashome a mararo a metso e 'meli tse phahameng li tla khutlisetsoa ho zero. Ho ka etsahala hore sena ha se seo moqapi oa mananeo a neng a se batla. Ke belaela hore o ne a batla ho bala: DataSize & 0xFFFFFFFFFFFFFFFFF8u.
Ho lokisa phoso, o lokela ho ngola sena:
DataSize &= ~(static_cast<uint64_t>(getStubAlignment()) - 1);
Kapa ho joalo:
DataSize &= ~(getStubAlignment() - 1ULL);
Sekhechana sa N34: Sekhechana sa mofuta o hlakileng se hlolehileng
template <typename T>
void scaleShuffleMask(int Scale, ArrayRef<T> Mask,
SmallVectorImpl<T> &ScaledMask) {
assert(0 < Scale && "Unexpected scaling factor");
int NumElts = Mask.size();
ScaledMask.assign(static_cast<size_t>(NumElts * Scale), -1);
....
}
Tlhokomeliso ea PVS-Studio:
Mofuta o hlakileng oa ho lahlela o sebelisoa ho qoba ho tlala ha o atisa mefuta e fapaneng eth. Leha ho le joalo, mofuta o hlakileng oa ho lahlela mona ha o sireletse khahlanong le ho tlala. Taba ea pele, liphapang li tla ata, 'me ke ka nako eo feela sephetho sa 32-bit sa ho atisa se tla atolosoa ho mofuta.
Sekhechana sa N35: E hlolehile ho Copy-Paste
Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) {
....
if (!match(Op0, m_PosZeroFP()) && isKnownNeverNaN(Op0, &TLI)) {
I.setOperand(0, ConstantFP::getNullValue(Op0->getType()));
return &I;
}
if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) {
I.setOperand(1, ConstantFP::getNullValue(Op0->getType())); // <=
return &I;
}
....
}
Tlhahlobo ena e ncha e thahasellisang e khetholla maemo ao ho 'ona sengoathoana sa khoutu se kopilitsoeng' me mabitso a mang ho sona a qalile ho fetoloa, empa sebakeng se le seng ha baa ka ba se lokisa.
Ka kopo hlokomela hore bolokong ba bobeli ba fetohile Op0 mabapi le Op1. Empa sebakeng se seng ha baa ka ba e lokisa. Ho ka etsahala hore ebe e ngotsoe tjena:
if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) {
I.setOperand(1, ConstantFP::getNullValue(Op1->getType()));
return &I;
}
Sekhechana sa N36: Pherekano e Fetohang
struct Status {
unsigned Mask;
unsigned Mode;
Status() : Mask(0), Mode(0){};
Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
Mode &= Mask;
};
....
};
Tlhokomeliso ea PVS-Studio:
Ho kotsi haholo ho fana ka likhang tsa tšebetso ka mabitso a tšoanang le a litho tsa sehlopha. Ho bonolo haholo ho ferekana. Re na le nyeoe e joalo ka pel'a rona. Polelo ena ha e utloahale:
Mode &= Mask;
Tlhaloso ea ts'ebetso e fetoha. Ke phetho. Khang ena ha e sa sebelisoa. Mohlomong u ka be u e ngotse tjena:
Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
this->Mode &= Mask;
};
Sekhechana sa N37: Pherekano e Fetohang
class SectionBase {
....
uint64_t Size = 0;
....
};
class SymbolTableSection : public SectionBase {
....
};
void SymbolTableSection::addSymbol(Twine Name, uint8_t Bind, uint8_t Type,
SectionBase *DefinedIn, uint64_t Value,
uint8_t Visibility, uint16_t Shndx,
uint64_t Size) {
....
Sym.Value = Value;
Sym.Visibility = Visibility;
Sym.Size = Size;
Sym.Index = Symbols.size();
Symbols.emplace_back(llvm::make_unique<Symbol>(Sym));
Size += this->EntrySize;
}
Tlhokomeliso PVS-Studio: V1001 [CWE-563] Mofuta oa 'Size' o abetsoe empa ha o sebelisoe qetellong ea mosebetsi. Ntho.cpp 424
Boemo bo tšoana le ba pele. E lokela ho ngoloa:
this->Size += this->EntrySize;
Fragment N38-N47: Ba lebetse ho hlahloba index
Nakong e fetileng, re ile ra sheba mehlala ea ts'oaetso ea ho hlahloba
int getGEPCost(Type *PointeeType, const Value *Ptr,
ArrayRef<const Value *> Operands) {
....
if (Ptr != nullptr) { // <=
assert(....);
BaseGV = dyn_cast<GlobalValue>(Ptr->stripPointerCasts());
}
bool HasBaseReg = (BaseGV == nullptr);
auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType()); // <=
....
}
Tlhokomeliso ea PVS-Studio: V1004 [CWE-476] 'Ptr' pointer e sebelisitsoe ka mokhoa o sa sireletsehang ka mor'a hore e netefatsoe khahlanong le nullptr. Hlahloba mela: 729, 738. TargetTransformInfoImpl.h 738
E fapaneng Tšoaea e ka lekana nullptr, joalokaha ho pakoa ke cheke:
if (Ptr != nullptr)
Leha ho le joalo, ka tlase ho pointer ena ha e sebelisoe ntle le tlhahlobo ea pele:
auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType());
A re hlahlobeng taba e ’ngoe e tšoanang.
llvm::DISubprogram *CGDebugInfo::getFunctionFwdDeclOrStub(GlobalDecl GD,
bool Stub) {
....
auto *FD = dyn_cast<FunctionDecl>(GD.getDecl());
SmallVector<QualType, 16> ArgTypes;
if (FD) // <=
for (const ParmVarDecl *Parm : FD->parameters())
ArgTypes.push_back(Parm->getType());
CallingConv CC = FD->getType()->castAs<FunctionType>()->getCallConv(); // <=
....
}
Tlhokomeliso ea PVS-Studio: V1004 [CWE-476] 'FD' pointer e sebelisitsoe ka mokhoa o sa sireletsehang ka mor'a hore e netefatsoe khahlanong le nullptr. Sheba mela: 3228, 3231. CGDebugInfo.cpp 3231
Ela hloko pontšo FD. Ke kholisehile hore bothata bo bonahala ka ho hlaka 'me ha ho hlokahale tlhaloso e khethehileng.
Le ho feta:
static void computePolynomialFromPointer(Value &Ptr, Polynomial &Result,
Value *&BasePtr,
const DataLayout &DL) {
PointerType *PtrTy = dyn_cast<PointerType>(Ptr.getType());
if (!PtrTy) { // <=
Result = Polynomial();
BasePtr = nullptr;
}
unsigned PointerBits =
DL.getIndexSizeInBits(PtrTy->getPointerAddressSpace()); // <=
....
}
Tlhokomeliso ea PVS-Studio: V1004 [CWE-476] 'PtrTy' pointer e sebelisitsoe ka mokhoa o sa sireletsehang ka mor'a hore e netefatsoe khahlanong le nullptr. Hlahloba mela: 960, 965. InterleavedLoadCombinePass.cpp 965
U ka itšireletsa joang liphosong tse joalo? E-ba hlokolosi haholoanyane ho Code-Review 'me u sebelise static analyzer ea PVS-Studio ho hlahloba khoutu ea hau khafetsa.
Ha ho na thuso ho qotsa likaroloana tse ling tsa khoutu tse nang le liphoso tsa mofuta ona. Ke tla siea feela lethathamo la litemoso sehloohong sena:
- V1004 [CWE-476] 'Expr' pointer e sebelisitsoe ka mokhoa o sa sireletsehang ka mor'a hore e netefatsoe khahlanong le nullptr. Sheba mela: 1049, 1078. DebugInfoMetadata.cpp 1078
- V1004 [CWE-476] 'PI' pointer e sebelisitsoe ka mokhoa o sa sireletsehang ka mor'a hore e netefatsoe khahlanong le nullptr. Sheba mela: 733, 753. LegacyPassManager.cpp 753
- V1004 [CWE-476] 'StatepointCall' pointer e sebelisitsoe ka mokhoa o sa sireletsehang ka mor'a hore e netefatsoe khahlanong le nullptr. Sheba mela: 4371, 4379. Verifier.cpp 4379
- V1004 [CWE-476] 'RV' pointer e sebelisitsoe ka mokhoa o sa sireletsehang ka mor'a hore e netefatsoe khahlanong le nullptr. Sheba mela: 2263, 2268. TGParser.cpp 2268
- V1004 [CWE-476] 'CalleeFn' pointer e sebelisitsoe ka mokhoa o sa sireletsehang ka mor'a hore e netefatsoe khahlanong le nullptr. Sheba mela: 1081, 1096. SimplifyLibCalls.cpp 1096
- V1004 [CWE-476] 'TC' pointer e sebelisitsoe ka mokhoa o sa sireletsehang ka mor'a hore e netefatsoe khahlanong le nullptr. Sheba mela: 1819, 1824. Driver.cpp 1824
Fragment N48-N60: Ha e nyatsehe, empa ke sekoli (leak e ka bang teng ea memori)
std::unique_ptr<IRMutator> createISelMutator() {
....
std::vector<std::unique_ptr<IRMutationStrategy>> Strategies;
Strategies.emplace_back(
new InjectorIRStrategy(InjectorIRStrategy::getDefaultOps()));
....
}
Tlhokomeliso ea PVS-Studio:
Ho kenya elemente qetellong ea setshelo joalo ka std::vector > o ka se ngole feela xxx.push_back(X e ncha), kaha ha ho na phetoho e hlakileng ho tloha X* в std::ikhetha_ptr.
Tharollo e tloaelehileng ke ho ngola xxx.emplace_back(X e ncha)kaha e bokella: mokhoa emplace_back e aga elemente ka tlhamalalo go tswa mo dikganetsanong tsa yona mme ka jalo a ka dirisa ditlhagi tse di tlhapileng.
Ha e bolokehe. Haeba vector e tletse, joale memori e abeloa hape. Ts'ebetso ea kabo ea memori e kanna ea hloleha, ho baka hore ho be le mokhelo std::bad_alloc. Tabeng ena, pointer e tla lahleha mme ntho e entsoeng e ke ke ea hlakoloa.
Tharollo e sireletsehileng ke ho theha unique_ptre tla ba mong'a pointer pele vector e leka ho fetisetsa mohopolo hape:
xxx.push_back(std::unique_ptr<X>(new X))
Ho tloha ka C++14, o ka sebelisa 'std::make_unique':
xxx.push_back(std::make_unique<X>())
Mofuta ona oa bofokoli ha o bohlokoa ho LLVM. Haeba memori e ke ke ea fanoa, moqapi o tla emisa feela. Leha ho le joalo, bakeng sa likopo tse nang le nako e telele
Kahoo, leha khoutu ena e sa hlahise tšokelo e sebetsang ho LLVM, ke fumane ho le molemo ho bua ka mokhoa ona oa phoso le hore mohlahlobi oa PVS-Studio o ithutile ho e tseba.
Litemoso tse ling tsa mofuta ona:
- V1023 [CWE-460] Sesupa se se nang monga sona se kenyelletswa setshelong sa 'Passes' ka mokgwa wa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. PassManejara.h 546
- V1023 [CWE-460] Sesupa se se nang monga sona se kenyelletswa setshelong sa 'AAs' ka mokgwa wa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. AliasAnalysis.h 324
- V1023 [CWE-460] Sesupa se se nang mong'a se kenyelletsoa ka har'a sets'oants'o sa 'Entries' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. DWARFDebugFrame.cpp 519
- V1023 [CWE-460] Sesupa se se nang monga sona se kenyelletswa setshelong sa 'AllEdges' ka mokgwa wa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. CFGMST.h 268
- V1023 [CWE-460] Sesupa se se nang mong'a se kenyeletsoa sejaneng sa 'VMaps' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. SimpleLoopUnswitch.cpp 2012
- V1023 [CWE-460] Sesupa se se nang mong'a se kenyeletsoa ka har'a sets'oants'o sa 'Records' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. FDRLogBuilder.h 30
- V1023 [CWE-460] Sesupa se se nang monga sona se kenngwa setshelong sa 'PendingSubmodules' ka mokgwa wa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. ModuleMap.cpp 810
- V1023 [CWE-460] Sesupa se se nang monga sona se kenyelletswa setshelong sa 'Objects' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. DebugMap.cpp 88
- V1023 [CWE-460] Sesupa se se nang monga sona se kenngwa setshelong sa 'Strategies' ka mokgwa wa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-isel-fuzzer.cpp 60
- V1023 [CWE-460] Sesupa se se nang mong'a se eketsoa ka har'a sets'oants'o sa 'Modifiers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-stress.cpp 685
- V1023 [CWE-460] Sesupa se se nang mong'a se eketsoa ka har'a sets'oants'o sa 'Modifiers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-stress.cpp 686
- V1023 [CWE-460] Sesupa se se nang mong'a se eketsoa ka har'a sets'oants'o sa 'Modifiers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-stress.cpp 688
- V1023 [CWE-460] Sesupa se se nang mong'a se eketsoa ka har'a sets'oants'o sa 'Modifiers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-stress.cpp 689
- V1023 [CWE-460] Sesupa se se nang mong'a se eketsoa ka har'a sets'oants'o sa 'Modifiers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-stress.cpp 690
- V1023 [CWE-460] Sesupa se se nang mong'a se eketsoa ka har'a sets'oants'o sa 'Modifiers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-stress.cpp 691
- V1023 [CWE-460] Sesupa se se nang mong'a se eketsoa ka har'a sets'oants'o sa 'Modifiers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-stress.cpp 692
- V1023 [CWE-460] Sesupa se se nang mong'a se eketsoa ka har'a sets'oants'o sa 'Modifiers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-stress.cpp 693
- V1023 [CWE-460] Sesupa se se nang mong'a se eketsoa ka har'a sets'oants'o sa 'Modifiers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. llvm-stress.cpp 694
- V1023 [CWE-460] Sesupa se se nang mong'a se kenyeletsoa ho sets'oants'o sa 'Operands' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. GlobalISelEmitter.cpp 1911
- V1023 [CWE-460] Sesupa se se nang mong'a se kenyelletsoa ka har'a sets'oants'o sa 'Stash' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. GlobalISelEmitter.cpp 2100
- V1023 [CWE-460] Sesupa se se nang mong'a se kenyelletsoa ka har'a sets'oants'o sa 'Matchers' ka mokhoa oa 'emplace_back'. Ho tla ba le ho dutla ha memori haeba ho ka ba le mokgelo. GlobalISelEmitter.cpp 2702
fihlela qeto e
Ke ile ka fana ka litemoso tse 60 ka kakaretso eaba kea emisa. Na ho na le liphoso tse ling tseo mohlahlobi oa PVS-Studio a li fumanang ho LLVM? E, ke entse joalo. Leha ho le joalo, ha ke ntse ke ngola likhechana tsa khoutu bakeng sa sengoloa, e ne e se e le mantsiboea, kapa ho feta bosiu, 'me ke ile ka etsa qeto ea hore ke nako ea ho e bitsa letsatsi.
Ke tšepa hore u e fumane e thahasellisa 'me u tla batla ho leka PVS-Studio analyzer.
U ka khoasolla analyzer 'me u fumane senotlolo sa minesweeper ho
Habohlokoa ka ho fetisisa, sebelisa tlhahlobo e tsitsitseng kamehla. Licheke tsa nako e le 'ngoe, e entsoeng ke rona e le ho phatlalatsa mokhoa oa ho hlahloba static le PVS-Studio ha se boemo bo tloaelehileng.
Mahlohonolo a ho ntlafatsa boleng le ts'epahalo ea khoutu ea hau!
Haeba u batla ho arolelana sengoloa sena le bamameli ba buang Senyesemane, ka kopo sebelisa sehokelo sa phetolelo: Andrey Karpov.
Source: www.habr.com