[PATCH] D48884: [CStringSyntaxChecker] Check strlcpy sizeof syntax
Mikhail Ramalho via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 20 09:12:45 PDT 2018
mikhail.ramalho added inline comments.
================
Comment at: cfe/trunk/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp:164
+ uint64_t ILRawVal = IL->getValue().getZExtValue();
+ if (const auto *Buffer = dyn_cast<ConstantArrayType>(DstArgDecl->getType())) {
+ ASTContext &C = BR.getContext();
----------------
I'm getting a segfault when analyzing tmux on this line. The backtrace:
```
#0 0x00007fffe98167b2 in llvm::PointerIntPairInfo<void*, 1u, llvm::PointerUnionUIntTraits<clang::Type const*, clang::ExtQuals const*> >::getPointer (
Value=<error reading variable: Cannot access memory at address 0x8>)
at ../include/llvm/ADT/PointerIntPair.h:152
#1 llvm::PointerIntPair<void*, 1u, bool, llvm::PointerUnionUIntTraits<clang::Type const*, clang::ExtQuals const*>, llvm::PointerIntPairInfo<void*, 1u, llvm::PointerUnionUIntTraits<clang::Type const*, clang::ExtQuals const*> > >::getPointer (this=<optimized out>)
at ../include/llvm/ADT/PointerIntPair.h:56
#2 llvm::PointerUnion<clang::Type const*, clang::ExtQuals const*>::isNull (
this=<optimized out>) at ../include/llvm/ADT/PointerUnion.h:117
#3 clang::QualType::isNull (this=<synthetic pointer>)
at ../tools/clang/include/clang/AST/Type.h:721
#4 clang::QualType::getCommonPtr (this=<synthetic pointer>)
at ../tools/clang/include/clang/AST/Type.h:671
#5 clang::QualType::getTypePtr (this=<synthetic pointer>)
at ../tools/clang/include/clang/AST/Type.h:5883
#6 llvm::simplify_type<clang::QualType>::getSimplifiedValue (
Val=<error reading variable: Cannot access memory at address 0x8>)
at ../tools/clang/include/clang/AST/Type.h:1261
#7 llvm::simplify_type<clang::QualType const>::getSimplifiedValue (Val=...)
at ../include/llvm/Support/Casting.h:49
#8 llvm::isa_impl_wrap<clang::ConstantArrayType, clang::QualType const, clang::Type const*>::doit (Val=...) at ../include/llvm/Support/Casting.h:125
#9 llvm::isa<clang::ConstantArrayType, clang::QualType> (Val=...)
at ../include/llvm/Support/Casting.h:144
#10 llvm::dyn_cast<clang::ConstantArrayType, clang::QualType> (Val=...)
at ../include/llvm/Support/Casting.h:324
#11 (anonymous namespace)::WalkAST::containsBadStrlcpyPattern (this=0x7fffffffa230,
CE=0xab1440)
at ../tools/clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp:164
#12 (anonymous namespace)::WalkAST::VisitCallExpr (this=0x7fffffffa230, CE=0xab1440)
at ../tools/clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp:206
#13 0x00007fffe98179e8 in clang::StmtVisitorBase<clang::make_ptr, (anonymous namespace)::WalkAST, void>::Visit (S=<optimized out>, this=0x7fffffffa230)
at ../tools/clang/include/clang/AST/StmtIterator.h:97
#14 (anonymous namespace)::WalkAST::VisitChildren (this=0x7fffffffa230, S=<optimized out>)
at ../tools/clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp:233
#15 0x00007fffe98179e8 in clang::StmtVisitorBase<clang::make_ptr, (anonymous namespace)::WalkAST, void>::Visit (S=<optimized out>, this=0x7fffffffa230)
at ../tools/clang/include/clang/AST/StmtIterator.h:97
#16 (anonymous namespace)::WalkAST::VisitChildren (this=0x7fffffffa230, S=<optimized out>)
at ../tools/clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp:233
#17 0x00007fffe9817aab in clang::StmtVisitorBase<clang::make_ptr, (anonymous namespace)::WalkAST, void>::Visit (S=<optimized out>, this=0x7fffffffa230)
at ../tools/clang/include/clang/StaticAnalyzer/Core/Checker.h:53
#18 (anonymous namespace)::CStringSyntaxChecker::checkASTCodeBody (BR=..., Mgr=...,
D=0xab04d8, this=0x6882b0)
at ../tools/clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp:243
#19 clang::ento::check::ASTCodeBody::_checkBody<(anonymous namespace)::CStringSyntaxChecker> (checker=0x6882b0, D=0xab04d8, mgr=..., BR=...)
at ../tools/clang/include/clang/StaticAnalyzer/Core/Checker.h:52
#20 0x00007fffe91c590f in clang::ento::CheckerFn<void (clang::Decl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&)>::operator()(clang::Decl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&) const (ps#2=..., ps#1=..., ps#0=0xab04d8,
this=<synthetic pointer>)
at ../tools/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h:70
#21 clang::ento::CheckerManager::runCheckersOnASTBody (this=<optimized out>,
D=D at entry=0xab04d8, mgr=..., BR=...)
at ../tools/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp:93
#22 0x00007fffea464515 in (anonymous namespace)::AnalysisConsumer::HandleCode (
this=this at entry=0x686cf0, D=D at entry=0xab04d8, Mode=1,
IMode=IMode at entry=clang::ento::ExprEngine::Inline_Minimal,
VisitedCallees=VisitedCallees at entry=0x0)
at ../tools/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:720
#23 0x00007fffea46db6c in (anonymous namespace)::AnalysisConsumer::VisitFunctionDecl (
FD=0xab04d8, this=0x686cf0)
at ../tools/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:362
#24 clang::RecursiveASTVisitor<(anonymous namespace)::AnalysisConsumer>::WalkUpFromFunctionDecl (D=0xab04d8, this=0x686cf0) at tools/clang/include/clang/AST/DeclNodes.inc:389
#25 clang::RecursiveASTVisitor<(anonymous namespace)::AnalysisConsumer>::TraverseFunctionDecl (this=0x686cf0, D=0xab04d8)
at ../tools/clang/include/clang/AST/RecursiveASTVisitor.h:2006
#26 0x00007fffea465f11 in clang::RecursiveASTVisitor<(anonymous namespace)::AnalysisConsumer>::TraverseDecl (this=0x686cf0, D=0xab04d8)
at tools/clang/include/clang/AST/DeclNodes.inc:389
#27 0x00007fffea46f0fe in (anonymous namespace)::AnalysisConsumer::runAnalysisOnTranslationUnit (this=this at entry=0x686cf0, C=...)
at ../tools/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:556
#28 0x00007fffea47061b in (anonymous namespace)::AnalysisConsumer::HandleTranslationUnit (
this=0x686cf0, C=...)
at ../tools/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:591
#29 0x00007fffebe08d49 in clang::ParseAST (S=..., PrintStats=<optimized out>,
SkipFunctionBodies=<optimized out>) at ../tools/clang/lib/Parse/ParseAST.cpp:170
#30 0x00007ffff14fa0c6 in clang::FrontendAction::Execute (this=this at entry=0x66e380)
at ../tools/clang/lib/Frontend/FrontendAction.cpp:910
#31 0x00007ffff14bb946 in clang::CompilerInstance::ExecuteAction (
this=this at entry=0x664e10, Act=...)
at ../tools/clang/lib/Frontend/CompilerInstance.cpp:961
#32 0x00007ffff1229222 in clang::ExecuteCompilerInvocation (Clang=Clang at entry=0x664e10)
at ../tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:257
#33 0x0000000000411418 in cc1_main (Argv=..., Argv0=<optimized out>,
MainAddr=MainAddr at entry=0x40db90 <GetExecutablePath[abi:cxx11](char const*, bool)>)
at ../tools/clang/tools/driver/cc1_main.cpp:216
#34 0x000000000040c562 in ExecuteCC1Tool (Tool=..., argv=...)
at ../tools/clang/tools/driver/driver.cpp:310
#35 main (argc_=<optimized out>, argv_=<optimized out>)
at ../tools/clang/tools/driver/driver.cpp:382
```
Repository:
rL LLVM
https://reviews.llvm.org/D48884
More information about the llvm-commits
mailing list