From 230a45bb50b23cf6efd54a5929171294570c845f Mon Sep 17 00:00:00 2001
From: Dulma Churchill
Date: Thu, 21 Nov 2024 03:48:20 -0800
Subject: [PATCH] [website] Update the website
Summary: Latest version of the website
Reviewed By: skcho
Differential Revision: D66239447
fbshipit-source-id: 6d496ce0ecae5fe032073c2e6d1ed37d464457a8
---
website/checkers.json | 3 +-
website/docs/all-categories.md | 2 +
website/docs/all-checkers.md | 8 +-
website/docs/all-issue-types.md | 73 +++++++++++++++---
.../docs/checker-annotation-reachability.md | 8 +-
.../docs/checker-dispatch-once-static-init.md | 23 ++++++
website/docs/checker-self-in-block.md | 1 +
website/static/man/next/infer-analyze.1.html | 69 ++++++++++++++++-
website/static/man/next/infer-report.1.html | 3 +
website/static/man/next/infer.1.html | 75 ++++++++++++++++++-
.../BottomLiftedUtils/index.html | 6 +-
.../FiniteMultiMap/argument-1-Key/index.html | 2 +-
.../argument-2-Value/index.html | 2 +-
.../FiniteSet/argument-1-Element/index.html | 2 +-
.../AbstractDomain/FiniteSet/index.html | 2 +-
.../argument-1-PPSet/index.html | 2 +-
.../FiniteSetOfPPSet/index.html | 2 +-
.../InvertedMap/argument-1-Key/index.html | 2 +-
.../InvertedSet/argument-1-Element/index.html | 2 +-
.../AbstractDomain/InvertedSet/index.html | 2 +-
.../Map/argument-1-Key/index.html | 2 +-
.../MapOfPPMap/argument-1-PPMap/index.html | 2 +-
.../MinReprSet/argument-1-Element/index.html | 2 +-
.../AbstractDomain/MinReprSet/index.html | 2 +-
.../SafeInvertedMap/argument-1-Key/index.html | 2 +-
.../AbstractDomain/StackedUtils/index.html | 8 +-
.../AbstractDomain/TopLiftedUtils/index.html | 2 +-
.../infer/Absint/AbstractDomain/index.html | 7 +-
.../module-type-FiniteSetS/index.html | 2 +-
.../module-type-InvertedSetS/index.html | 2 +-
.../argument-1-T/CFG/Node/IdMap/index.html | 2 +-
.../argument-1-T/CFG/Node/IdSet/index.html | 2 +-
.../argument-1-T/CFG/Node/IdMap/index.html | 2 +-
.../argument-1-T/CFG/Node/IdSet/index.html | 2 +-
.../argument-1-T/CFG/Node/IdMap/index.html | 2 +-
.../argument-1-T/CFG/Node/IdSet/index.html | 2 +-
.../MakeDisjunctive/argument-1-T/index.html | 4 +
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../argument-1-T/CFG/Node/IdMap/index.html | 2 +-
.../argument-1-T/CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../Absint/AccessPath/BaseMap/index.html | 2 +-
.../AccessTree/Make/AccessMap/index.html | 2 +-
.../module-type-S/AccessMap/index.html | 2 +-
.../next/infer/Absint/CallSite/Set/index.html | 2 +-
.../MakeTraceElem/FiniteSet/index.html | 2 +-
.../MakeTraceElem/argument-1-Elem/index.html | 2 +-
.../ExplicitTrace/MakeTraceElem/index.html | 2 +-
.../FiniteSet/index.html | 2 +-
.../argument-1-Elem/index.html | 2 +-
.../MakeTraceElemModuloLocation/index.html | 2 +-
.../module-type-Element/index.html | 2 +-
.../module-type-FiniteSet/index.html | 2 +-
.../FiniteSet/index.html | 2 +-
.../module-type-TraceElem/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../infer/Absint/Passthrough/Set/index.html | 2 +-
.../argument-1-Base/Node/IdMap/index.html | 2 +-
.../argument-1-Base/Node/IdSet/index.html | 2 +-
.../ProcCfg/DefaultNode/IdMap/index.html | 2 +-
.../ProcCfg/DefaultNode/IdSet/index.html | 2 +-
.../Absint/ProcCfg/InstrNode/IdMap/index.html | 2 +-
.../Absint/ProcCfg/InstrNode/IdSet/index.html | 2 +-
.../argument-1-Base/Node/IdMap/index.html | 2 +-
.../argument-1-Base/Node/IdSet/index.html | 2 +-
.../ProcCfg/module-type-Node/IdMap/index.html | 2 +-
.../ProcCfg/module-type-Node/IdSet/index.html | 2 +-
.../module-type-NodeCommonS/IdMap/index.html | 2 +-
.../module-type-NodeCommonS/IdSet/index.html | 2 +-
.../module-type-S/Node/IdMap/index.html | 2 +-
.../module-type-S/Node/IdSet/index.html | 2 +-
.../argument-1-CFG/Node/IdMap/index.html | 2 +-
.../argument-1-CFG/Node/IdSet/index.html | 2 +-
.../module-type-S/CFG/Node/IdMap/index.html | 2 +-
.../module-type-S/CFG/Node/IdSet/index.html | 2 +-
.../Absint/Sink/module-type-S/Set/index.html | 2 +-
.../argument-1-TaintTraceElem/Set/index.html | 2 +-
.../Absint/SinkTrace/MakeSink/Set/index.html | 2 +-
.../argument-1-TaintTraceElem/Set/index.html | 2 +-
.../module-type-S/Sink/Set/index.html | 2 +-
.../module-type-S/Source/Set/index.html | 2 +-
.../infer/Absint/Source/Dummy/Set/index.html | 2 +-
.../Source/module-type-S/Set/index.html | 2 +-
.../Make/argument-1-Spec/Sink/Set/index.html | 2 +-
.../argument-1-Spec/Source/Set/index.html | 2 +-
.../module-type-S/Sink/Set/index.html | 2 +-
.../module-type-S/Source/Set/index.html | 2 +-
.../module-type-Spec/Sink/Set/index.html | 2 +-
.../module-type-Spec/Source/Set/index.html | 2 +-
.../module-type-S/Set/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../module-type-DisjReady/index.html | 4 +
.../module-type-HIL/CFG/Node/IdMap/index.html | 2 +-
.../module-type-HIL/CFG/Node/IdSet/index.html | 2 +-
.../module-type-S/CFG/Node/IdMap/index.html | 2 +-
.../module-type-S/CFG/Node/IdSet/index.html | 2 +-
.../module-type-SIL/CFG/Node/IdMap/index.html | 2 +-
.../module-type-SIL/CFG/Node/IdSet/index.html | 2 +-
.../static/odoc/next/infer/Absint/index.html | 2 +-
.../next/infer/BO/AbsLoc/Allocsite/index.html | 2 +-
.../odoc/next/infer/BO/AbsLoc/Loc/index.html | 2 +-
.../next/infer/BO/AbsLoc/LocSet/index.html | 2 +-
.../infer/BO/Bounds/BoundTrace/index.html | 2 +-
.../ItvThresholds/index.html | 2 +-
.../BO/BufferOverrunTrace/Issue/index.html | 2 +-
.../odoc/next/infer/BO/FuncPtr/Set/index.html | 2 +-
.../next/infer/BO/Symb/SymbolMap/index.html | 2 +-
.../next/infer/BO/Symb/SymbolSet/index.html | 2 +-
.../Biabduction/BiabductionSummary/index.html | 3 +-
.../infer/Biabduction/Predicates/index.html | 4 +-
.../Biabduction/RetainCyclesType/index.html | 2 +-
.../argument-1-CFG/Node/IdMap/index.html | 2 +-
.../argument-1-CFG/Node/IdSet/index.html | 2 +-
.../CallSites/index.html | 2 +-
.../Checkers/Control/GuardNodes/index.html | 6 +-
.../next/infer/Checkers/Control/index.html | 2 +-
.../argument-1-CFG/Node/IdMap/index.html | 2 +-
.../argument-1-CFG/Node/IdSet/index.html | 2 +-
.../LoopInvariant/LoopNodes/index.html | 6 +-
.../infer/Checkers/LoopInvariant/index.html | 2 +-
.../infer/Checkers/Loop_control/index.html | 11 +--
.../Checkers/ReachingDefs/Defs/index.html | 6 +-
.../infer/Checkers/ReachingDefs/index.html | 2 +-
.../Checkers/SiofTrace/GlobalVar/index.html | 2 +-
.../SiofTrace/GlobalVarSet/index.html | 2 +-
.../Checkers/SiofTrace/Sink/Set/index.html | 2 +-
.../Checkers/SiofTrace/Source/Set/index.html | 2 +-
.../odoc/next/infer/Checkers/index.html | 2 +-
.../CContext/CXXTemporarySet/index.html | 2 +-
.../infer/ClangFrontend/CContext/index.html | 4 +-
.../CMethodProperties/index.html | 2 +-
.../ClangFrontend/CMethodSignature/index.html | 3 +-
.../Concurrency/AbstractAddress/index.html | 2 +-
.../RacerDDomain/AccessDomain/index.html | 2 +-
.../AccessSnapshot/FiniteSet/index.html | 2 +-
.../RacerDDomain/AccessSnapshot/index.html | 2 +-
.../StarvationDomain/Acquisitions/index.html | 2 +-
.../StarvationDomain/CriticalPair/index.html | 2 +-
.../StarvationDomain/CriticalPairs/index.html | 2 +-
.../LazilyInitialized/index.html | 3 +-
.../StarvationDomain/Lock/index.html | 2 +-
.../StarvationDomain/NullLocs/index.html | 3 +-
.../NullLocsCriticalPairs/index.html | 2 +-
.../ScheduledWorkDomain/index.html | 2 +-
.../ScheduledWorkItem/index.html | 2 +-
.../LatentConfigs/index.html | 2 +-
.../UncheckedCallees/index.html | 2 +-
.../next/infer/IBase/Checker/Set/index.html | 2 +-
.../odoc/next/infer/IBase/Checker/index.html | 2 +-
.../odoc/next/infer/IBase/Config/index.html | 4 +-
.../IBase/CostIssues/CostKindMap/index.html | 2 +-
.../odoc/next/infer/IBase/Die/index.html | 2 +-
.../next/infer/IBase/IssueType/Map/index.html | 2 +-
.../next/infer/IBase/IssueType/index.html | 2 +-
.../next/infer/IBase/Location/Map/index.html | 2 +-
.../odoc/next/infer/IBase/Logging/index.html | 2 +-
.../next/infer/IBase/SourceFile/index.html | 2 +-
.../odoc/next/infer/IBase/Stats/index.html | 2 +-
.../odoc/next/infer/IBase/Timeable/index.html | 2 +-
.../odoc/next/infer/IBase/Utils/index.html | 2 +-
.../odoc/next/infer/IR/CapturedVar/index.html | 2 +-
.../static/odoc/next/infer/IR/Exp/index.html | 2 +-
.../next/infer/IR/Fieldname/Map/index.html | 2 +-
.../next/infer/IR/Fieldname/Set/index.html | 2 +-
.../odoc/next/infer/IR/Ident/index.html | 2 +-
.../odoc/next/infer/IR/Mangled/Map/index.html | 2 +-
.../odoc/next/infer/IR/Mangled/Set/index.html | 2 +-
.../next/infer/IR/ProcAttributes/index.html | 2 +-
.../next/infer/IR/Procdesc/IdMap/index.html | 2 +-
.../odoc/next/infer/IR/Procdesc/index.html | 4 +-
.../next/infer/IR/Procname/Map/index.html | 2 +-
.../next/infer/IR/Procname/Python/index.html | 2 +-
.../next/infer/IR/Procname/Set/index.html | 2 +-
.../odoc/next/infer/IR/Procname/index.html | 7 +-
.../odoc/next/infer/IR/Pvar/Map/index.html | 2 +-
.../odoc/next/infer/IR/Pvar/Set/index.html | 2 +-
.../IR/Specialization/HeapPath/Map/index.html | 2 +-
.../IR/Specialization/HeapPath/Set/index.html | 2 +-
.../IR/Specialization/Pulse/Map/index.html | 2 +-
.../IR/Specialization/Pulse/Set/index.html | 2 +-
.../IR/SpecializedProcname/Map/index.html | 2 +-
.../IR/SpecializedProcname/Set/index.html | 2 +-
.../infer/IR/Tenv/MethodInfo/Hack/index.html | 2 +-
.../next/infer/IR/Tenv/MethodInfo/index.html | 2 +-
.../static/odoc/next/infer/IR/Tenv/index.html | 15 +++-
.../next/infer/IR/Typ/Name/Hack/index.html | 2 +-
.../next/infer/IR/Typ/Name/Map/index.html | 2 +-
.../next/infer/IR/Typ/Name/Set/index.html | 2 +-
.../odoc/next/infer/IR/Typ/Name/index.html | 2 +-
.../static/odoc/next/infer/IR/Typ/index.html | 2 +-
.../odoc/next/infer/IR/Var/Map/index.html | 2 +-
.../odoc/next/infer/IR/Var/Set/index.html | 2 +-
.../argument-1-CFG/Node/IdMap/index.html | 2 +-
.../argument-1-CFG/Node/IdMap/index.html | 2 +-
.../Node/IdMap/index.html | 2 +-
.../module-type-S/CFG/Node/IdMap/index.html | 2 +-
.../Make/argument-1-T/index.html | 2 +-
.../module-type-NormalizedT/index.html | 2 +-
.../infer/IStdlib/HashSet/Make/index.html | 2 +-
.../next/infer/IStdlib/HashSet/index.html | 4 +-
.../next/infer/IStdlib/IInt/Set/index.html | 2 +-
.../odoc/next/infer/IStdlib/IInt/index.html | 2 +-
.../infer/IStdlib/LRUHashtbl/Make/index.html | 2 +-
.../next/infer/IStdlib/LRUHashtbl/index.html | 4 +-
.../argument-1-Ord/index.html | 2 +-
.../MakeHashSexpPPMap/index.html | 2 +-
.../argument-1-Ord/index.html | 2 +-
.../MakeHashSexpPPSet/index.html | 2 +-
.../MakePPMap/argument-1-Ord/index.html | 2 +-
.../PrettyPrintable/MakePPMap/index.html | 2 +-
.../MakePPMonoMap/argument-1-Ord/index.html | 2 +-
.../MakePPSet/argument-1-Ord/index.html | 2 +-
.../PrettyPrintable/MakePPSet/index.html | 2 +-
.../argument-1-Rank/index.html | 2 +-
.../PPMonoMapOfPPMap/argument-1-M/index.html | 2 +-
.../module-type-HashSexpPPMap/index.html | 2 +-
.../module-type-HashSexpPPSet/index.html | 2 +-
.../index.html | 2 +-
.../module-type-PPMap/index.html | 2 +-
.../module-type-PPSet/index.html | 2 +-
.../index.html | 2 +-
.../index.html | 2 +-
.../RecencyMap/Make/argument-1-Key/index.html | 2 +-
.../Make/argument-2-Value/index.html | 2 +-
.../infer/IStdlib/UnionFind/Make/index.html | 2 +-
.../next/infer/IStdlib/UnionFind/index.html | 4 +-
.../infer/JavaFrontend/JContext/index.html | 2 +-
.../JavaFrontend/JProgramDesc/index.html | 2 +-
.../CanonValue/Memory/Access/index.html | 5 +-
.../CanonValue/Set/index.html | 2 +-
.../Pulselib/PulseAbductiveDomain/index.html | 8 +-
.../PulseAbstractValue/Map/index.html | 2 +-
.../PulseAbstractValue/Set/index.html | 2 +-
.../infer/Pulselib/PulseAccess/index.html | 2 +-
.../PulseAccess/module-type-S/index.html | 2 +-
.../TaintSanitizedSet/index.html | 2 +-
.../PulseAttribute/TaintSinkMap/index.html | 2 +-
.../PulseAttribute/TaintedSet/index.html | 2 +-
.../PulseBaseMemory/Access/index.html | 4 +-
.../module-type-S/Access/index.html | 5 +-
.../Pulselib/PulseCallOperations/index.html | 1 +
.../Make/Memory/Access/index.html | 5 +-
.../PulseCanonValue/Make/Set/index.html | 2 +-
.../module-type-S/Memory/Access/index.html | 5 +-
.../module-type-S/Set/index.html | 2 +-
.../Pulselib/PulseModelsDSL/Syntax/index.html | 10 ++-
.../PulseModelsImport/Basic/index.html | 1 +
.../PulseMutualRecursion/Set/index.html | 2 +-
.../PulseNonDisjunctiveDomain/index.html | 3 +-
.../PulseNonDisjunctiveOperations/index.html | 1 +
.../infer/Pulselib/PulseSatUnsat/index.html | 2 +-
.../PulseTaintConfig/Kind/Set/index.html | 2 +-
.../infer/Pulselib/PulseTrace/Set/index.html | 2 +-
.../DirectCallee/Set/index.html | 2 +-
.../PulseValueHistory/CellId/index.html | 2 +-
.../odoc/next/infer/Pulselib/index.html | 2 +-
.../PyIR/BuiltinCaller/index.html | 2 +-
.../PythonFrontend/PyIR/CodeInfo/index.html | 2 +-
.../infer/PythonFrontend/PyIR/Exp/index.html | 2 +-
.../PyIR/Ident/Special/index.html | 2 +-
.../PythonFrontend/PyIR/Ident/index.html | 2 +-
.../PythonFrontend/PyIR/Location/index.html | 2 +-
.../PythonFrontend/PyIR/NodeName/index.html | 2 +-
.../PythonFrontend/PyIR/QualName/index.html | 2 +-
.../infer/PythonFrontend/PyIR/SSA/index.html | 2 +-
.../infer/PythonFrontend/PyIR/Stmt/index.html | 2 +-
.../next/infer/PythonFrontend/PyIR/index.html | 4 +
.../infer/PythonFrontend/PyIRExec/index.html | 2 +-
.../odoc/next/infer/PythonFrontend/index.html | 2 +-
.../next/infer/Textuallib/LineMap/index.html | 2 +-
.../infer/Textuallib/Textual/Attr/index.html | 2 +-
.../Textuallib/Textual/FieldName/index.html | 2 +-
.../infer/Textuallib/Textual/Ident/index.html | 2 +-
.../infer/Textuallib/Textual/Instr/index.html | 2 +-
.../Textuallib/Textual/Location/index.html | 2 +-
.../Textuallib/Textual/NodeName/index.html | 2 +-
.../Textuallib/Textual/ProcName/index.html | 2 +-
.../Textual/QualifiedProcName/index.html | 2 +-
.../Textuallib/Textual/TypeName/index.html | 2 +-
.../Textuallib/Textual/VarName/index.html | 2 +-
.../next/infer/Textuallib/Textual/index.html | 2 +-
.../Textual/module-type-NAME/index.html | 2 +-
.../TextualBasicVerification/index.html | 2 +-
.../infer/Textuallib/TextualDecls/index.html | 2 +-
.../infer/Textuallib/TextualParser/index.html | 2 +-
.../infer/Textuallib/TextualSil/index.html | 7 +-
.../Textuallib/TextualTransform/index.html | 2 +-
.../TextualTypeVerification/index.html | 2 +-
.../odoc/next/infer/Textuallib/index.html | 2 +-
.../argument-1-CFG/Node/IdMap/index.html | 2 +-
.../argument-1-CFG/Node/IdSet/index.html | 2 +-
.../argument-1-T/CFG/Node/IdMap/index.html | 2 +-
.../argument-1-T/CFG/Node/IdSet/index.html | 2 +-
.../argument-1-T/CFG/Node/IdMap/index.html | 2 +-
.../argument-1-T/CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
.../CFG/Node/IdMap/index.html | 2 +-
.../CFG/Node/IdSet/index.html | 2 +-
317 files changed, 621 insertions(+), 367 deletions(-)
create mode 100644 website/docs/checker-dispatch-once-static-init.md
diff --git a/website/checkers.json b/website/checkers.json
index 05397cedaf0..b8551dcca15 100644
--- a/website/checkers.json
+++ b/website/checkers.json
@@ -4,7 +4,8 @@
"all-checkers", "all-categories", "all-issue-types",
"checker-annotation-reachability", "checker-biabduction",
"checker-bufferoverrun", "checker-config-impact-analysis",
- "checker-cost", "checker-fragment-retains-view", "checker-impurity",
+ "checker-cost", "checker-dispatch-once-static-init",
+ "checker-fragment-retains-view", "checker-impurity",
"checker-inefficient-keyset-iterator", "checker-lineage",
"checker-litho-required-props", "checker-liveness",
"checker-loop-hoisting", "checker-parameter-not-null-checked",
diff --git a/website/docs/all-categories.md b/website/docs/all-categories.md
index 7026943eab1..440534cca62 100644
--- a/website/docs/all-categories.md
+++ b/website/docs/all-categories.md
@@ -10,6 +10,7 @@ Concurrent accesses to the same resource conflict in a way that can give incorre
Issue types in this category:
- [DEADLOCK](/docs/next/all-issue-types#deadlock)
+- [DISPATCH_ONCE_IN_STATIC_INIT](/docs/next/all-issue-types#dispatch_once_in_static_init)
- [GUARDEDBY_VIOLATION](/docs/next/all-issue-types#guardedby_violation)
- [INTERFACE_NOT_THREAD_SAFE](/docs/next/all-issue-types#interface_not_thread_safe)
- [LOCK_CONSISTENCY_VIOLATION](/docs/next/all-issue-types#lock_consistency_violation)
@@ -32,6 +33,7 @@ Issue types in this category:
- [CXX_STRING_CAPTURED_IN_BLOCK](/docs/next/all-issue-types#cxx_string_captured_in_block)
- [NIL_MESSAGING_TO_NON_POD](/docs/next/all-issue-types#nil_messaging_to_non_pod)
- [NIL_MESSAGING_TO_NON_POD_LATENT](/docs/next/all-issue-types#nil_messaging_to_non_pod_latent)
+- [NSSTRING_INTERNAL_PTR_CAPTURED_IN_BLOCK](/docs/next/all-issue-types#nsstring_internal_ptr_captured_in_block)
- [PULSE_REFERENCE_STABILITY](/docs/next/all-issue-types#pulse_reference_stability)
- [PULSE_UNINITIALIZED_VALUE](/docs/next/all-issue-types#pulse_uninitialized_value)
- [STACK_VARIABLE_ADDRESS_ESCAPE](/docs/next/all-issue-types#stack_variable_address_escape)
diff --git a/website/docs/all-checkers.md b/website/docs/all-checkers.md
index f38ee777954..6895e942795 100644
--- a/website/docs/all-checkers.md
+++ b/website/docs/all-checkers.md
@@ -7,7 +7,7 @@ Here is an overview of the checkers currently available in Infer.
## Annotation Reachability
-Given pairs of source and sink annotations, e.g. `@A` and `@B`, this checker will warn whenever some method annotated with `@A` calls, directly or indirectly, another method annotated with `@B`. Besides the custom pairs, it is also possible to enable some built-in checks, such as `@PerformanceCritical` reaching `@Expensive` or `@NoAllocation` reaching `new`. See flags starting with `--annotation-reachability`.
+Given pairs of source and sink annotations, e.g. `@A` and `@B`, this checker will warn whenever some method annotated with `@A` calls, directly or indirectly, another method annotated with `@B`. Besides the custom pairs, it is also possible to enable some built-in checks, such as `@PerformanceCritical` reaching `@Expensive` or `@NoAllocation` reaching `new`. It is also possible to model methods as if they were annotated, using regular expressions. This should also work in languages where there are no annotations. See flags starting with `--annotation-reachability`.
[Visit here for more information.](/docs/next/checker-annotation-reachability)
@@ -37,6 +37,12 @@ Computes the asymptotic complexity of functions with respect to execution cost o
[Visit here for more information.](/docs/next/checker-cost)
+## dispatch-once in static init
+
+Detect if dispatch_once is called from a static constructor.
+
+[Visit here for more information.](/docs/next/checker-dispatch-once-static-init)
+
## Fragment Retains View
Detects when Android fragments are not explicitly nullified before becoming unreachable.
diff --git a/website/docs/all-issue-types.md b/website/docs/all-issue-types.md
index 4c085d6a8cb..b43c1948cee 100644
--- a/website/docs/all-issue-types.md
+++ b/website/docs/all-issue-types.md
@@ -554,25 +554,21 @@ dereferences it later.
*Category: [Memory error](/docs/next/all-categories#memory-error). Reported as "C++ String Captured in Block" by [self-in-block](/docs/next/checker-self-in-block).*
-This check flags when a local variable of type `std::string` is captured in an escaping block.
+This check flags when an internal pointer of a local variable of type `std::string` is captured in an escaping block.
This means that the block will be leaving the current scope, i.e. it is
not annotated with `__attribute__((noescape))`.
Example:
```
-- (void)string_captured_in_escaping_block_bad {
std::string fullName;
+ const char* c = fullName.c_str();
dispatch_async(dispatch_get_main_queue(), ^{
- const char* c = fullName.c_str();
- ...
+ const char* c1 = c;
});
- ...;
-}
```
-This could cause crashes because the variable is likely to be freed if the block
-uses it later.
+This could cause crashes because the variable is likely to be freed when the code is executed, leaving the pointer dangling.
## DANGLING_POINTER_DEREFERENCE
@@ -656,6 +652,11 @@ To suppress reports of deadlocks in a method `m()` use the
This error is reported in C++. It fires when the value assigned to a variables
is never used (e.g., `int i = 1; i = 2; return i;`).
+## DISPATCH_ONCE_IN_STATIC_INIT
+
+*Category: [Concurrency](/docs/next/all-categories#concurrency). Reported as "dispatch_once in static init" by [dispatch-once-static-init](/docs/next/checker-dispatch-once-static-init).*
+
+Calling dispatch_once during the static initialization of objects is risky, for example it could cause deadlocks, because other objects might not have been initialized yet.
## DIVIDE_BY_ZERO
*Reported as "Divide By Zero" by [biabduction](/docs/next/checker-biabduction).*
@@ -1494,6 +1495,26 @@ sign(X) ->
*Category: [Runtime exception](/docs/next/all-categories#runtime-exception). Reported as "No True Branch In If Latent" by [pulse](/docs/next/checker-pulse).*
A latent [NO_TRUE_BRANCH_IN_IF](#no_true_branch_in_if). See the [documentation on Pulse latent issues](/docs/next/checker-pulse#latent-issues).
+## NSSTRING_INTERNAL_PTR_CAPTURED_IN_BLOCK
+
+*Category: [Memory error](/docs/next/all-categories#memory-error). Reported as "NSString Captured in Block" by [self-in-block](/docs/next/checker-self-in-block).*
+
+This check flags when an internal pointer of a local variable of type `std::string` is captured in an escaping block.
+This means that the block will be leaving the current scope, i.e. it is
+not annotated with `__attribute__((noescape))`.
+
+Example:
+
+```
+ std::string fullName;
+ const char* c = fullName.c_str();
+ dispatch_async(dispatch_get_main_queue(), ^{
+ const char* c1 = c;
+ });
+```
+
+This could cause crashes because the variable is likely to be freed when the code is executed, leaving the pointer dangling.
+
## NULLPTR_DEREFERENCE
*Category: [Null pointer dereference](/docs/next/all-categories#null-pointer-dereference). Reported as "Null Dereference" by [pulse](/docs/next/checker-pulse).*
@@ -2013,7 +2034,41 @@ Failure to `await` an `Awaitable` can lead to non-deterministic amount of the as
*Category: [Resource leak](/docs/next/all-categories#resource-leak). Reported as "Unfinished Builder" by [pulse](/docs/next/checker-pulse).*
-See [RESOURCE_LEAK](#resource_leak)
+Classes adhering to builder pattern are usually expected to call a finalizer function at some point to produce final result based on values that were passed to a builder itself. If finalizer function hasn't been called then builder's data won't be consumed in any meaningful way and will just be discarded.
+
+```hack
+class MyBuilder {
+ private int $a = 0;
+ private int $b = 0;
+
+ public function setA(int $a): MyBuilder {
+ $this->a = $a;
+ return $this;
+ }
+
+ public function setB(int $b): MyBuilder {
+ $this->b = $b;
+ return $this;
+ }
+
+ public function saveX(): Awaitable {
+ // typically do something involving IO
+ }
+}
+
+class BuilderTester {
+ public static function builderUserOK(): void {
+ $b = new MyBuilder(0);
+ $b->setA(42)->setB(97)->saveX();
+ }
+
+ public static function builderUserBad(): void {
+ $b = new MyBuilder(0);
+ $b->setA(42)->setB(97); // ERROR: saveX hasn't been called so the builder's data is discarded
+ }
+}
+```
+
## PULSE_UNINITIALIZED_CONST
*Category: [Runtime exception](/docs/next/all-categories#runtime-exception). Reported as "Uninitialized Const" by [pulse](/docs/next/checker-pulse).*
diff --git a/website/docs/checker-annotation-reachability.md b/website/docs/checker-annotation-reachability.md
index 6d2245a3dac..11955e60bfe 100644
--- a/website/docs/checker-annotation-reachability.md
+++ b/website/docs/checker-annotation-reachability.md
@@ -1,16 +1,16 @@
---
title: "Annotation Reachability"
-description: "Given pairs of source and sink annotations, e.g. `@A` and `@B`, this checker will warn whenever some method annotated with `@A` calls, directly or indirectly, another method annotated with `@B`. Besides the custom pairs, it is also possible to enable some built-in checks, such as `@PerformanceCritical` reaching `@Expensive` or `@NoAllocation` reaching `new`. See flags starting with `--annotation-reachability`."
+description: "Given pairs of source and sink annotations, e.g. `@A` and `@B`, this checker will warn whenever some method annotated with `@A` calls, directly or indirectly, another method annotated with `@B`. Besides the custom pairs, it is also possible to enable some built-in checks, such as `@PerformanceCritical` reaching `@Expensive` or `@NoAllocation` reaching `new`. It is also possible to model methods as if they were annotated, using regular expressions. This should also work in languages where there are no annotations. See flags starting with `--annotation-reachability`."
---
-Given pairs of source and sink annotations, e.g. `@A` and `@B`, this checker will warn whenever some method annotated with `@A` calls, directly or indirectly, another method annotated with `@B`. Besides the custom pairs, it is also possible to enable some built-in checks, such as `@PerformanceCritical` reaching `@Expensive` or `@NoAllocation` reaching `new`. See flags starting with `--annotation-reachability`.
+Given pairs of source and sink annotations, e.g. `@A` and `@B`, this checker will warn whenever some method annotated with `@A` calls, directly or indirectly, another method annotated with `@B`. Besides the custom pairs, it is also possible to enable some built-in checks, such as `@PerformanceCritical` reaching `@Expensive` or `@NoAllocation` reaching `new`. It is also possible to model methods as if they were annotated, using regular expressions. This should also work in languages where there are no annotations. See flags starting with `--annotation-reachability`.
Activate with `--annotation-reachability`.
Supported languages:
-- C/C++/ObjC: No
+- C/C++/ObjC: Yes
- C#/.Net: No
-- Erlang: No
+- Erlang: Yes
- Hack: No
- Java: Yes
- Python: No
diff --git a/website/docs/checker-dispatch-once-static-init.md b/website/docs/checker-dispatch-once-static-init.md
new file mode 100644
index 00000000000..adb882f8fa4
--- /dev/null
+++ b/website/docs/checker-dispatch-once-static-init.md
@@ -0,0 +1,23 @@
+---
+title: "dispatch-once in static init"
+description: "Detect if dispatch_once is called from a static constructor."
+---
+
+Detect if dispatch_once is called from a static constructor.
+
+Activate with `--dispatch-once-static-init`.
+
+Supported languages:
+- C/C++/ObjC: Yes
+- C#/.Net: No
+- Erlang: No
+- Hack: No
+- Java: No
+- Python: No
+
+
+
+## List of Issue Types
+
+The following issue types are reported by this checker:
+- [DISPATCH_ONCE_IN_STATIC_INIT](/docs/next/all-issue-types#dispatch_once_in_static_init)
diff --git a/website/docs/checker-self-in-block.md b/website/docs/checker-self-in-block.md
index cdd934bbcac..a2d416c99fa 100644
--- a/website/docs/checker-self-in-block.md
+++ b/website/docs/checker-self-in-block.md
@@ -25,6 +25,7 @@ The following issue types are reported by this checker:
- [CXX_STRING_CAPTURED_IN_BLOCK](/docs/next/all-issue-types#cxx_string_captured_in_block)
- [MIXED_SELF_WEAKSELF](/docs/next/all-issue-types#mixed_self_weakself)
- [MULTIPLE_WEAKSELF](/docs/next/all-issue-types#multiple_weakself)
+- [NSSTRING_INTERNAL_PTR_CAPTURED_IN_BLOCK](/docs/next/all-issue-types#nsstring_internal_ptr_captured_in_block)
- [SELF_IN_BLOCK_PASSED_TO_INIT](/docs/next/all-issue-types#self_in_block_passed_to_init)
- [STRONG_SELF_NOT_CHECKED](/docs/next/all-issue-types#strong_self_not_checked)
- [WEAK_SELF_IN_NO_ESCAPE_BLOCK](/docs/next/all-issue-types#weak_self_in_no_escape_block)
diff --git a/website/static/man/next/infer-analyze.1.html b/website/static/man/next/infer-analyze.1.html
index f71ae89c034..ea6d3515537 100644
--- a/website/static/man/next/infer-analyze.1.html
+++ b/website/static/man/next/infer-analyze.1.html
@@ -82,9 +82,12 @@
OPTIONS
Besides the custom pairs, it is also possible to enable some
built-in checks, such as ‘@PerformanceCritical‘
reaching ‘@Expensive‘ or
-‘@NoAllocation‘ reaching ‘new‘. See
-flags starting with ‘--annotation-reachability‘.
-(Conversely: --no-annotation-reachability)
+‘@NoAllocation‘ reaching ‘new‘. It
+is also possible to model methods as if they were annotated,
+using regular expressions. This should also work in
+languages where there are no annotations. See flags starting
+with ‘--annotation-reachability‘. (Conversely:
+--no-annotation-reachability)
Deactivates:
+dispatch-once-static-init checker: Detect if
+dispatch_once is called from a static constructor.
+(Conversely: --dispatch-once-static-init)
+
+
+
--dispatch-once-static-init-only
+
+
Activates: Enable
+dispatch-once-static-init and disable all other
+checkers (Conversely:
+--no-dispatch-once-static-init-only)
+
+
--files-to-analyze-indexfile
@@ -488,6 +508,21 @@
OPTIONS
blocks safely.
+
--ondemand-recursion-restart-limit
+int
+
+
In order to make the analysis
+of mutual recursion cycles deterministic in their output,
+the analysis of a cycle of mutually recursive functions may
+restart the analysis of the entire cycle from a
+deterministic place. If the graph of mutual recursion is
+more complex than a simple cycle this could potentially
+result in many restarts before finding the "right"
+procedure from which to start. This limits the number of
+restarts before we give up and analyze the cycle as-is
+instead.
+
+
--no-parameter-not-null-checked
Deactivates:
@@ -1417,6 +1452,13 @@
PULSE CHECKER OPTIONS
are method or namespace::method
+
--pulse-model-unknown-pure
++string
+
+
Regex of methods that should be
+modelled as unknown pure in Pulse
Activates: [EXPERIMENTAL] add
+over-approximate reasoning on top of the under-approximate,
+disjunctive reasoning of Pulse. (Conversely:
+--no-pulse-over-approximate-reasoning)
+
--pulse-recency-limitint
@@ -1747,6 +1797,19 @@
PULSE CHECKER OPTIONS
Stop exploring new paths after
int loop iterations
Specify the strategy to wire
+globals dictionnaire into each function
+
+
- own-by-closures: each closure
+captured the global
+dictionary
+- own-by-module: each function is given the global
+dictionary as
+argument (not referenced in the heap to avoid aliases)
OPTIONS
DATA_FLOW_TO_SINK (disabled by default),
DEADLOCK (enabled by default),
DEAD_STORE (enabled by default),
+DISPATCH_ONCE_IN_STATIC_INIT (disabled by default),
DIVIDE_BY_ZERO (disabled by default),
DO_NOT_REPORT (enabled by default),
EMPTY_VECTOR_ACCESS (enabled by default),
@@ -325,6 +326,8 @@
OPTIONS
NO_MATCH_OF_RHS_LATENT (disabled by default),
NO_TRUE_BRANCH_IN_IF (enabled by default),
NO_TRUE_BRANCH_IN_IF_LATENT (disabled by default),
+NSSTRING_INTERNAL_PTR_CAPTURED_IN_BLOCK (disabled by
+default),
NULLPTR_DEREFERENCE (enabled by default),
NULLPTR_DEREFERENCE_IN_NULLSAFE_CLASS (enabled by default),
diff --git a/website/static/man/next/infer.1.html b/website/static/man/next/infer.1.html
index f965a50d568..d6cffb419a5 100644
--- a/website/static/man/next/infer.1.html
+++ b/website/static/man/next/infer.1.html
@@ -136,9 +136,12 @@
OPTIONS
Besides the custom pairs, it is also possible to enable some
built-in checks, such as ‘@PerformanceCritical‘
reaching ‘@Expensive‘ or
-‘@NoAllocation‘ reaching ‘new‘. See
-flags starting with ‘--annotation-reachability‘.
-(Conversely: --no-annotation-reachability)
+‘@NoAllocation‘ reaching ‘new‘. It
+is also possible to model methods as if they were annotated,
+using regular expressions. This should also work in
+languages where there are no annotations. See flags starting
+with ‘--annotation-reachability‘. (Conversely:
+--no-annotation-reachability)
OPTIONS
DATA_FLOW_TO_SINK (disabled by default),
DEADLOCK (enabled by default),
DEAD_STORE (enabled by default),
+DISPATCH_ONCE_IN_STATIC_INIT (disabled by default),
DIVIDE_BY_ZERO (disabled by default),
DO_NOT_REPORT (enabled by default),
EMPTY_VECTOR_ACCESS (enabled by default),
@@ -1045,6 +1050,8 @@
OPTIONS
NO_MATCH_OF_RHS_LATENT (disabled by default),
NO_TRUE_BRANCH_IN_IF (enabled by default),
NO_TRUE_BRANCH_IN_IF_LATENT (disabled by default),
+NSSTRING_INTERNAL_PTR_CAPTURED_IN_BLOCK (disabled by
+default),
NULLPTR_DEREFERENCE (enabled by default),
NULLPTR_DEREFERENCE_IN_NULLSAFE_CLASS (enabled by default),
@@ -1124,6 +1131,24 @@
OPTIONS
WEAK_SELF_IN_NO_ESCAPE_BLOCK (enabled by default),
Wrong_argument_number (enabled by default).
See also infer-report(1).
+--no-dispatch-once-static-init
+
+
Deactivates:
+dispatch-once-static-init checker: Detect if
+dispatch_once is called from a static constructor.
+(Conversely: --dispatch-once-static-init)
+
+
See also
+infer-analyze(1).
+--dispatch-once-static-init-only
+
+
Activates: Enable
+dispatch-once-static-init and disable all other
+checkers (Conversely:
+--no-dispatch-once-static-init-only)
+
+
See also
+infer-analyze(1).
--dump-duplicate-symbols
Activates: Dump all symbols
@@ -1970,6 +1995,21 @@
OPTIONS
See also
infer-capture(1).
+--ondemand-recursion-restart-limitint
+
+
In order to make the analysis
+of mutual recursion cycles deterministic in their output,
+the analysis of a cycle of mutually recursive functions may
+restart the analysis of the entire cycle from a
+deterministic place. If the graph of mutual recursion is
+more complex than a simple cycle this could potentially
+result in many restarts before finding the "right"
+procedure from which to start. This limits the number of
+restarts before we give up and analyze the cycle as-is
+instead.
+
+
See also
+infer-analyze(1).
--no-parameter-not-null-checked
Deactivates:
@@ -2360,6 +2400,13 @@
OPTIONS
as transfering memory ownership in Pulse. Accepted formats
are method or namespace::method
+
See also
+infer-analyze(1).
+--pulse-model-unknown-pure+string
+
+
Regex of methods that should be
+modelled as unknown pure in Pulse
+
See also
infer-analyze(1).
--pulse-model-unreachable+string
@@ -2443,6 +2490,15 @@
OPTIONS
and disable all other checkers (Conversely:
--no-pulse-only)
+
See also
+infer-analyze(1).
+--pulse-over-approximate-reasoning
+
+
Activates: [EXPERIMENTAL] add
+over-approximate reasoning on top of the under-approximate,
+disjunctive reasoning of Pulse. (Conversely:
+--no-pulse-over-approximate-reasoning)
+
See also
infer-analyze(1).
--pulse-recency-limitint
@@ -2771,6 +2827,19 @@
OPTIONS
See also
infer-capture(1).
+--python-globals{ own-by-closures | own-by-module
+}
+
+
Specify the strategy to wire
+globals dictionnaire into each function
+
+
- own-by-closures: each closure
+captured the global
+dictionary
+- own-by-module: each function is given the global
+dictionary as
+argument (not referenced in the heap to avoid aliases)
+See also infer-analyze(1).
--qualified-cpp-name-block-list+string
Skip analyzing the procedures
diff --git a/website/static/odoc/next/infer/Absint/AbstractDomain/BottomLiftedUtils/index.html b/website/static/odoc/next/infer/Absint/AbstractDomain/BottomLiftedUtils/index.html
index 122be83fb71..bd2ed7de337 100644
--- a/website/static/odoc/next/infer/Absint/AbstractDomain/BottomLiftedUtils/index.html
+++ b/website/static/odoc/next/infer/Absint/AbstractDomain/BottomLiftedUtils/index.html
@@ -1,2 +1,6 @@
-
Lift a set to a powerset domain ordered by subset. The elements of the set should be drawn from a *finite* collection of possible values, since the widening operator here is just union.
Lift a set to a powerset domain ordered by subset. The elements of the set should be drawn from a *finite* collection of possible values, since the widening operator here is just union.
Lift a PPSet to a powerset domain ordered by subset. The elements of the set should be drawn from a *finite* collection of possible values, since the widening operator here is just union.