clang-tools 22.0.0git
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:
[legend]

Public Member Functions

 CloexecCheck (StringRef Name, ClangTidyContext *Context)

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.

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.

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()

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::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 FuncBindingStr, and FuncDeclBindingStr.

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

◆ registerMatchersImpl()

◆ 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 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: