[clang] [alpha.webkit.UnretainedCallArgsChecker] Add a checker for NS or CF type call arguments. (PR #128586)
Ryosuke Niwa via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 11 00:03:29 PDT 2025
================
@@ -141,6 +158,42 @@ class RawPtrRefCallArgsChecker
}
}
+ void visitObjCMessageExpr(const ObjCMessageExpr *E, const Decl *D) const {
+ if (BR->getSourceManager().isInSystemHeader(E->getExprLoc()))
+ return;
+
+ auto Selector = E->getSelector();
+ if (auto *Receiver = E->getInstanceReceiver()->IgnoreParenCasts()) {
+ std::optional<bool> IsUnsafe = isUnsafePtr(E->getReceiverType());
+ if (IsUnsafe && *IsUnsafe && !isPtrOriginSafe(Receiver)) {
+ if (auto *InnerMsg = dyn_cast<ObjCMessageExpr>(Receiver)) {
+ auto InnerSelector = InnerMsg->getSelector();
+ if (InnerSelector.getNameForSlot(0) == "alloc" &&
+ Selector.getNameForSlot(0).starts_with("init"))
+ return;
+ }
+ reportBugOnReceiver(Receiver, D);
+ }
+ }
+
+ auto *MethodDecl = E->getMethodDecl();
+ if (!MethodDecl)
+ return;
+
+ auto ArgCount = E->getNumArgs();
+ for (unsigned i = 0; i < ArgCount && i < MethodDecl->param_size(); ++i) {
----------------
rniwa wrote:
Oh, that's a good point. Indeed this code doesn't work for variadic functions. Fixed.
https://github.com/llvm/llvm-project/pull/128586
More information about the cfe-commits
mailing list