clang-tools 19.0.0git
Public Member Functions | Protected Member Functions | Static Protected Attributes | List of all members
clang::tidy::android::CloexecCheck Class Reference

The base class for all close-on-exec checks in Android module. More...

#include <CloexecCheck.h>

Inheritance diagram for clang::tidy::android::CloexecCheck:
Inheritance graph
[legend]

Public Member Functions

 CloexecCheck (StringRef Name, ClangTidyContext *Context)
 
- Public Member Functions inherited from clang::tidy::ClangTidyCheck
 ClangTidyCheck (StringRef CheckName, ClangTidyContext *Context)
 Initializes the check with CheckName and Context.
 
virtual bool isLanguageVersionSupported (const LangOptions &LangOpts) const
 Override this to disable registering matchers and PP callbacks if an invalid language version is being used.
 
virtual void registerPPCallbacks (const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP)
 Override this to register PPCallbacks in the preprocessor.
 
virtual void registerMatchers (ast_matchers::MatchFinder *Finder)
 Override this to register AST matchers with Finder.
 
virtual void check (const ast_matchers::MatchFinder::MatchResult &Result)
 ClangTidyChecks that register ASTMatchers should do the actual work in here.
 
DiagnosticBuilder diag (SourceLocation Loc, StringRef Description, DiagnosticIDs::Level Level=DiagnosticIDs::Warning)
 Add a diagnostic with the check's name.
 
DiagnosticBuilder diag (StringRef Description, DiagnosticIDs::Level Level=DiagnosticIDs::Warning)
 Add a diagnostic with the check's name.
 
DiagnosticBuilder configurationDiag (StringRef Description, DiagnosticIDs::Level Level=DiagnosticIDs::Warning) const
 Adds a diagnostic to report errors in the check's configuration.
 
virtual void storeOptions (ClangTidyOptions::OptionMap &Options)
 Should store all options supported by this check with their current values or default values for options that haven't been overridden.
 

Protected Member Functions

void registerMatchersImpl (ast_matchers::MatchFinder *Finder, ast_matchers::internal::Matcher< FunctionDecl > Function)
 
void insertMacroFlag (const ast_matchers::MatchFinder::MatchResult &Result, StringRef MacroFlag, int ArgPos)
 Currently, we have three types of fixes.
 
void replaceFunc (const ast_matchers::MatchFinder::MatchResult &Result, StringRef WarningMsg, StringRef FixMsg)
 Type2 is to replace the API to another function that has required the ability.
 
void insertStringFlag (const ast_matchers::MatchFinder::MatchResult &Result, const char Mode, const int ArgPos)
 Type3 is also to add a flag to the corresponding argument, but this time, the flag is some string and each char represents a mode rather than a macro.
 
StringRef getSpellingArg (const ast_matchers::MatchFinder::MatchResult &Result, int N) const
 Helper function to get the spelling of a particular argument.
 
- Protected Member Functions inherited from clang::tidy::ClangTidyCheck
StringRef getCurrentMainFile () const
 Returns the main file name of the current translation unit.
 
const LangOptions & getLangOpts () const
 Returns the language options from the context.
 
bool areDiagsSelfContained () const
 Returns true when the check is run in a use case when only 1 fix will be applied at a time.
 
StringRef getID () const override
 

Static Protected Attributes

static const char * FuncDeclBindingStr = "funcDecl"
 Binding name of the FuncDecl of a function call.
 
static const char * FuncBindingStr ="func"
 Binding name of the function call expression.
 

Additional Inherited Members

- Protected Attributes inherited from clang::tidy::ClangTidyCheck
OptionsView Options
 

Detailed Description

The base class for all close-on-exec checks in Android module.

To be specific, there are some functions that need the close-on-exec flag to prevent the file descriptor leakage on fork+exec and this class provides utilities to identify and fix these C functions.

Definition at line 26 of file CloexecCheck.h.

Constructor & Destructor Documentation

◆ CloexecCheck()

clang::tidy::android::CloexecCheck::CloexecCheck ( StringRef  Name,
ClangTidyContext Context 
)
inline

Definition at line 28 of file CloexecCheck.h.

Member Function Documentation

◆ getSpellingArg()

StringRef clang::tidy::android::CloexecCheck::getSpellingArg ( const ast_matchers::MatchFinder::MatchResult &  Result,
int  N 
) const
protected

◆ insertMacroFlag()

void clang::tidy::android::CloexecCheck::insertMacroFlag ( const ast_matchers::MatchFinder::MatchResult &  Result,
StringRef  MacroFlag,
int  ArgPos 
)
protected

Currently, we have three types of fixes.

Type1 is to insert the necessary macro flag in the flag argument. For example, 'O_CLOEXEC' is required in function 'open()', so

open(file, O_RDONLY);

should be

open(file, O_RDONLY | O_CLOEXE);
Parameters
[out]ResultMatchResult from AST matcher.
MacroFlagThe macro name of the flag.
ArgPosThe 0-based position of the flag argument.

Definition at line 51 of file CloexecCheck.cpp.

References clang::tidy::ClangTidyCheck::diag(), clang::tidy::utils::exprHasBitFlagWithSpelling(), FuncBindingStr, and FuncDeclBindingStr.

Referenced by clang::tidy::android::CloexecAccept4Check::check(), clang::tidy::android::CloexecEpollCreate1Check::check(), clang::tidy::android::CloexecInotifyInit1Check::check(), clang::tidy::android::CloexecMemfdCreateCheck::check(), clang::tidy::android::CloexecOpenCheck::check(), clang::tidy::android::CloexecPipe2Check::check(), and clang::tidy::android::CloexecSocketCheck::check().

◆ insertStringFlag()

void clang::tidy::android::CloexecCheck::insertStringFlag ( const ast_matchers::MatchFinder::MatchResult &  Result,
const char  Mode,
const int  ArgPos 
)
protected

Type3 is also to add a flag to the corresponding argument, but this time, the flag is some string and each char represents a mode rather than a macro.

For example, 'fopen' needs char 'e' in its mode argument string, so

fopen(in_file, "r");

should be

fopen(in_file, "re");
Parameters
[out]ResultMatchResult from AST matcher.
ModeThe required mode char.
ArgPosThe 0-based position of the flag argument.

Definition at line 79 of file CloexecCheck.cpp.

References clang::tidy::ClangTidyCheck::diag(), FuncBindingStr, and FuncDeclBindingStr.

Referenced by clang::tidy::android::CloexecFopenCheck::check().

◆ registerMatchersImpl()

void clang::tidy::android::CloexecCheck::registerMatchersImpl ( ast_matchers::MatchFinder *  Finder,
ast_matchers::internal::Matcher< FunctionDecl >  Function 
)
protected

◆ replaceFunc()

void clang::tidy::android::CloexecCheck::replaceFunc ( const ast_matchers::MatchFinder::MatchResult &  Result,
StringRef  WarningMsg,
StringRef  FixMsg 
)
protected

Type2 is to replace the API to another function that has required the ability.

For example:

creat(path, mode);

should be

open(path, O_CREAT | O_WRONLY | O_TRUNC | O_CLOEXEC, mode)
Parameters
[out]ResultMatchResult from AST matcher.
WarningMsgThe warning message.
FixMsgThe fix message.

Definition at line 72 of file CloexecCheck.cpp.

References clang::tidy::ClangTidyCheck::diag(), and FuncBindingStr.

Referenced by clang::tidy::android::CloexecAcceptCheck::check(), clang::tidy::android::CloexecCreatCheck::check(), clang::tidy::android::CloexecDupCheck::check(), clang::tidy::android::CloexecEpollCreateCheck::check(), clang::tidy::android::CloexecInotifyInitCheck::check(), and clang::tidy::android::CloexecPipeCheck::check().

Member Data Documentation

◆ FuncBindingStr

const char * clang::tidy::android::CloexecCheck::FuncBindingStr ="func"
staticprotected

Binding name of the function call expression.

Definition at line 95 of file CloexecCheck.h.

Referenced by getSpellingArg(), insertMacroFlag(), insertStringFlag(), registerMatchersImpl(), and replaceFunc().

◆ FuncDeclBindingStr

const char * clang::tidy::android::CloexecCheck::FuncDeclBindingStr = "funcDecl"
staticprotected

Binding name of the FuncDecl of a function call.

Definition at line 92 of file CloexecCheck.h.

Referenced by clang::tidy::android::CloexecOpenCheck::check(), insertMacroFlag(), insertStringFlag(), and registerMatchersImpl().


The documentation for this class was generated from the following files: