clang-tools  14.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]
Collaboration diagram for clang::tidy::android::CloexecCheck:
Collaboration 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. More...
 
virtual bool isLanguageVersionSupported (const LangOptions &LangOpts) const
 Override this to disable registering matchers and PP callbacks if an invalid language version is being used. More...
 
virtual void registerPPCallbacks (const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP)
 Override this to register PPCallbacks in the preprocessor. More...
 
virtual void registerMatchers (ast_matchers::MatchFinder *Finder)
 Override this to register AST matchers with Finder. More...
 
virtual void check (const ast_matchers::MatchFinder::MatchResult &Result)
 ClangTidyChecks that register ASTMatchers should do the actual work in here. More...
 
DiagnosticBuilder diag (SourceLocation Loc, StringRef Description, DiagnosticIDs::Level Level=DiagnosticIDs::Warning)
 Add a diagnostic with the check's name. More...
 
DiagnosticBuilder diag (StringRef Description, DiagnosticIDs::Level Level=DiagnosticIDs::Warning)
 Add a diagnostic with the check's name. More...
 
DiagnosticBuilder configurationDiag (StringRef Description, DiagnosticIDs::Level Level=DiagnosticIDs::Warning) const
 Adds a diagnostic to report errors in the check's configuration. More...
 
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. More...
 

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. More...
 
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. More...
 
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. More...
 
StringRef getSpellingArg (const ast_matchers::MatchFinder::MatchResult &Result, int N) const
 Helper function to get the spelling of a particular argument. More...
 
- Protected Member Functions inherited from clang::tidy::ClangTidyCheck
StringRef getCurrentMainFile () const
 Returns the main file name of the current translation unit. More...
 
const LangOptions & getLangOpts () const
 Returns the language options from the context. More...
 

Static Protected Attributes

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

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 28 of file CloexecCheck.h.

Constructor & Destructor Documentation

◆ CloexecCheck()

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

Definition at line 30 of file CloexecCheck.h.

Member Function Documentation

◆ getSpellingArg()

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

Helper function to get the spelling of a particular argument.

Definition at line 102 of file CloexecCheck.cpp.

◆ 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 53 of file CloexecCheck.cpp.

◆ 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 81 of file CloexecCheck.cpp.

◆ registerMatchersImpl()

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

Definition at line 43 of file CloexecCheck.cpp.

◆ 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 74 of file CloexecCheck.cpp.

Member Data Documentation

◆ FuncBindingStr

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

Binding name of the function call expression.

Definition at line 97 of file CloexecCheck.h.

◆ FuncDeclBindingStr

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

Binding name of the FuncDecl of a function call.

Definition at line 94 of file CloexecCheck.h.


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