mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 13:50:11 +00:00
[clang][analyzer] Fix StdLibraryFunctionsChecker 'mkdir' return value.
The functions 'mkdir', 'mknod', 'mkdirat', 'mknodat' return 0 on success and -1 on failure. The checker modeled these functions with a >= 0 return value on success which is changed to 0 only. This fix makes ErrnoChecker work better for these functions. Reviewed By: steakhal Differential Revision: https://reviews.llvm.org/D127277
This commit is contained in:
parent
20e6ada2fb
commit
7dc81c6244
@ -1904,44 +1904,40 @@ void StdLibraryFunctionsChecker::initFunctionSummaries(
|
||||
ArgumentCondition(1, WithinRange, Range(0, SizeMax))));
|
||||
|
||||
// int mkdir(const char *pathname, mode_t mode);
|
||||
// FIXME: returns 0 on success, ReturnsValidFileDescriptor is incorrect
|
||||
addToFunctionSummaryMap(
|
||||
"mkdir", Signature(ArgTypes{ConstCharPtrTy, Mode_tTy}, RetType{IntTy}),
|
||||
Summary(NoEvalCall)
|
||||
.Case(ReturnsValidFileDescriptor, ErrnoMustNotBeChecked)
|
||||
.Case(ReturnsZero, ErrnoMustNotBeChecked)
|
||||
.Case(ReturnsMinusOne, ErrnoNEZeroIrrelevant)
|
||||
.ArgConstraint(NotNull(ArgNo(0))));
|
||||
|
||||
// int mkdirat(int dirfd, const char *pathname, mode_t mode);
|
||||
// FIXME: returns 0 on success, ReturnsValidFileDescriptor is incorrect
|
||||
addToFunctionSummaryMap(
|
||||
"mkdirat",
|
||||
Signature(ArgTypes{IntTy, ConstCharPtrTy, Mode_tTy}, RetType{IntTy}),
|
||||
Summary(NoEvalCall)
|
||||
.Case(ReturnsValidFileDescriptor, ErrnoMustNotBeChecked)
|
||||
.Case(ReturnsZero, ErrnoMustNotBeChecked)
|
||||
.Case(ReturnsMinusOne, ErrnoNEZeroIrrelevant)
|
||||
.ArgConstraint(NotNull(ArgNo(1))));
|
||||
|
||||
Optional<QualType> Dev_tTy = lookupTy("dev_t");
|
||||
|
||||
// int mknod(const char *pathname, mode_t mode, dev_t dev);
|
||||
// FIXME: returns 0 on success, ReturnsValidFileDescriptor is incorrect
|
||||
addToFunctionSummaryMap(
|
||||
"mknod",
|
||||
Signature(ArgTypes{ConstCharPtrTy, Mode_tTy, Dev_tTy}, RetType{IntTy}),
|
||||
Summary(NoEvalCall)
|
||||
.Case(ReturnsValidFileDescriptor, ErrnoMustNotBeChecked)
|
||||
.Case(ReturnsZero, ErrnoMustNotBeChecked)
|
||||
.Case(ReturnsMinusOne, ErrnoNEZeroIrrelevant)
|
||||
.ArgConstraint(NotNull(ArgNo(0))));
|
||||
|
||||
// int mknodat(int dirfd, const char *pathname, mode_t mode, dev_t dev);
|
||||
// FIXME: returns 0 on success, ReturnsValidFileDescriptor is incorrect
|
||||
addToFunctionSummaryMap(
|
||||
"mknodat",
|
||||
Signature(ArgTypes{IntTy, ConstCharPtrTy, Mode_tTy, Dev_tTy},
|
||||
RetType{IntTy}),
|
||||
Summary(NoEvalCall)
|
||||
.Case(ReturnsValidFileDescriptor, ErrnoMustNotBeChecked)
|
||||
.Case(ReturnsZero, ErrnoMustNotBeChecked)
|
||||
.Case(ReturnsMinusOne, ErrnoNEZeroIrrelevant)
|
||||
.ArgConstraint(NotNull(ArgNo(1))));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user