[clang] [clang][Sema] Add buffer-size checks for unistd I/O functions (PR #224979)
Denys Fedoryshchenko via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 2 03:00:23 PDT 2026
================
@@ -1466,6 +1466,58 @@ void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD,
break;
}
+ case Builtin::BIread:
+ case Builtin::BIpread:
+ case Builtin::BIpread64:
+ case Builtin::BIreadlink:
+ case Builtin::BIreadlinkat:
+ case Builtin::BIgetcwd: {
+ unsigned BufIdx = 1;
+ if (BuiltinID == Builtin::BIgetcwd)
+ BufIdx = 0;
+ else if (BuiltinID == Builtin::BIreadlinkat)
+ BufIdx = 2;
+ unsigned CountIdx = BufIdx + 1;
+ unsigned ExpectedArgs = CountIdx + 1;
+ if (BuiltinID == Builtin::BIpread || BuiltinID == Builtin::BIpread64)
+ ++ExpectedArgs;
+ if (TheCall->getNumArgs() != ExpectedArgs ||
+ !TheCall->getArg(BufIdx)->getType()->isPointerType() ||
+ !TheCall->getArg(CountIdx)->getType()->isIntegerType())
+ return;
+ if (BuiltinID != Builtin::BIgetcwd &&
+ !(BuiltinID == Builtin::BIreadlink
+ ? TheCall->getArg(0)->getType()->isPointerType()
+ : TheCall->getArg(0)->getType()->isIntegerType()))
+ return;
+ if (BuiltinID == Builtin::BIreadlinkat &&
+ !TheCall->getArg(1)->getType()->isPointerType())
+ return;
----------------
nuclearcat wrote:
Done
https://github.com/llvm/llvm-project/pull/224979
More information about the cfe-commits
mailing list