martong created this revision. martong added a reviewer: steakhal. Herald added subscribers: ASDenysPetrov, Charusso, gamesh411, dkrupp, donat.nagy, Szelethus, mikhail.ramalho, a.sidorin, rnkovacs, szepet, baloghadamsoftware, xazax.hun, whisperity. Herald added a reviewer: Szelethus. martong requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
close: It is quite often that users chose to call close even if the fd is negative. Theoretically, it would be nicer to close only valid fds, but in practice the implementations of close just returns with EBADF in case of a non-valid fd param. So, we can eliminate many false positives if we let close to take -1 as an fd. Other negative values are very unlikely, because open and other fd factories return with -1 in case of failure. mmap: In the case of MAP_ANONYMOUS flag (which is supported e.g. in Linux) the mapping is not backed by any file; its contents are initialized to zero. The fd argument is ignored; however, some implementations require fd to be -1 if MAP_ANONYMOUS (or MAP_ANON) is specified, and portable applications should ensure this. Consequently, we must allow -1 as the 4th arg. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D92764 Files: clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp Index: clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp +++ clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp @@ -1672,7 +1672,7 @@ addToFunctionSummaryMap("close", Signature(ArgTypes{IntTy}, RetType{IntTy}), Summary(NoEvalCall) .ArgConstraint(ArgumentCondition( - 0, WithinRange, Range(0, IntMax)))); + 0, WithinRange, Range(-1, IntMax)))); // long fpathconf(int fildes, int name); addToFunctionSummaryMap("fpathconf", @@ -1746,7 +1746,7 @@ Summary(NoEvalCall) .ArgConstraint(ArgumentCondition(1, WithinRange, Range(1, SizeMax))) .ArgConstraint( - ArgumentCondition(4, WithinRange, Range(0, IntMax)))); + ArgumentCondition(4, WithinRange, Range(-1, IntMax)))); // int pipe(int fildes[2]); addToFunctionSummaryMap(
Index: clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp +++ clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp @@ -1672,7 +1672,7 @@ addToFunctionSummaryMap("close", Signature(ArgTypes{IntTy}, RetType{IntTy}), Summary(NoEvalCall) .ArgConstraint(ArgumentCondition( - 0, WithinRange, Range(0, IntMax)))); + 0, WithinRange, Range(-1, IntMax)))); // long fpathconf(int fildes, int name); addToFunctionSummaryMap("fpathconf", @@ -1746,7 +1746,7 @@ Summary(NoEvalCall) .ArgConstraint(ArgumentCondition(1, WithinRange, Range(1, SizeMax))) .ArgConstraint( - ArgumentCondition(4, WithinRange, Range(0, IntMax)))); + ArgumentCondition(4, WithinRange, Range(-1, IntMax)))); // int pipe(int fildes[2]); addToFunctionSummaryMap(
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits