[PATCH] D150254: [tidy] Fix possible use-after-free in IdentifierNamingCheck
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 10 01:55:58 PDT 2023
kadircet updated this revision to Diff 520936.
kadircet added a comment.
- Expose getID to tidy-checks and use it instead of storing checkname
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D150254/new/
https://reviews.llvm.org/D150254
Files:
clang-tools-extra/clang-tidy/ClangTidyCheck.h
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
Index: clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
===================================================================
--- clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
+++ clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
@@ -11,6 +11,7 @@
#include "../utils/RenamerClangTidyCheck.h"
#include <optional>
+#include <string>
namespace clang::tidy {
namespace readability {
@@ -202,7 +203,6 @@
mutable llvm::StringMap<FileStyle> NamingStylesCache;
FileStyle *MainFileStyle;
ClangTidyContext *Context;
- const StringRef CheckName;
const bool GetConfigPerFile;
const bool IgnoreFailedSplit;
HungarianNotation HungarianNotation;
Index: clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -14,6 +14,7 @@
#include "clang/Lex/Preprocessor.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMapInfo.h"
+#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FormatVariadic.h"
@@ -396,7 +397,7 @@
IdentifierNamingCheck::IdentifierNamingCheck(StringRef Name,
ClangTidyContext *Context)
- : RenamerClangTidyCheck(Name, Context), Context(Context), CheckName(Name),
+ : RenamerClangTidyCheck(Name, Context), Context(Context),
GetConfigPerFile(Options.get("GetConfigPerFile", true)),
IgnoreFailedSplit(Options.get("IgnoreFailedSplit", false)) {
@@ -1461,6 +1462,7 @@
if (Iter != NamingStylesCache.end())
return Iter->getValue();
+ llvm::StringRef CheckName = getID();
ClangTidyOptions Options = Context->getOptionsForFile(FileName);
if (Options.Checks && GlobList(*Options.Checks).contains(CheckName)) {
auto It = NamingStylesCache.try_emplace(
Index: clang-tools-extra/clang-tidy/ClangTidyCheck.h
===================================================================
--- clang-tools-extra/clang-tidy/ClangTidyCheck.h
+++ clang-tools-extra/clang-tidy/ClangTidyCheck.h
@@ -407,7 +407,6 @@
private:
void run(const ast_matchers::MatchFinder::MatchResult &Result) override;
- StringRef getID() const override { return CheckName; }
std::string CheckName;
ClangTidyContext *Context;
@@ -422,6 +421,7 @@
bool areDiagsSelfContained() const {
return Context->areDiagsSelfContained();
}
+ StringRef getID() const override { return CheckName; }
};
/// Read a named option from the ``Context`` and parse it as a bool.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150254.520936.patch
Type: text/x-patch
Size: 2700 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230510/6f6ec52b/attachment.bin>
More information about the cfe-commits
mailing list