Skip to content

Commit d5d7a3b

Browse files
committed
Restrict the safe member access to this pointer.
1 parent e0d5e10 commit d5d7a3b

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,11 @@ bool isExprToGetCheckedPtrCapableMember(const clang::Expr *E) {
235235
auto *ME = dyn_cast<MemberExpr>(E);
236236
if (!ME)
237237
return false;
238+
auto *Base = ME->getBase();
239+
if (!Base)
240+
return false;
241+
if (!isa<CXXThisExpr>(Base->IgnoreParenCasts()))
242+
return false;
238243
auto *D = ME->getMemberDecl();
239244
if (!D)
240245
return false;

clang/test/Analysis/Checkers/WebKit/call-args-checked.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ struct WrapperObj {
4444
consume(checkedRef);
4545
// expected-warning@-1{{Call argument is unchecked and unsafe [alpha.webkit.UncheckedCallArgsChecker]}}
4646
}
47+
void bar(WrapperObj& other) {
48+
consume(other.checked);
49+
// expected-warning@-1{{Call argument is unchecked and unsafe [alpha.webkit.UncheckedCallArgsChecker]}}
50+
}
4751
};
4852

4953
} // namespace call_args_checked

clang/test/Analysis/Checkers/WebKit/unchecked-local-vars.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,12 @@ namespace member_var {
302302
// expected-warning@-1{{Local variable 'b' is unchecked and unsafe [alpha.webkit.UncheckedLocalVarsChecker]}}
303303
b->method();
304304
}
305+
306+
void bar(WrapperObj& wrapper) {
307+
CheckedObj* ptr = &wrapper.checked;
308+
// expected-warning@-1{{Local variable 'ptr' is unchecked and unsafe [alpha.webkit.UncheckedLocalVarsChecker]}}
309+
ptr->method();
310+
}
305311
};
306312

307313
}

0 commit comments

Comments
 (0)