[clang] 7446601 - [-Wunsafe-buffer-usage] Fix a potential overflow bug reported by #126334 (#129169)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 28 10:33:36 PST 2025
Author: Ziqing Luo
Date: 2025-02-28T10:33:32-08:00
New Revision: 7446601c6a9b71945fdc9d7434d8347789708858
URL: https://github.com/llvm/llvm-project/commit/7446601c6a9b71945fdc9d7434d8347789708858
DIFF: https://github.com/llvm/llvm-project/commit/7446601c6a9b71945fdc9d7434d8347789708858.diff
LOG: [-Wunsafe-buffer-usage] Fix a potential overflow bug reported by #126334 (#129169)
`MeasureTokenLength` may return an unsigned 0 representing failure in
obtaining length of a token. The analysis now gives up on such cases.
Otherwise, there might be issues caused by unsigned integer "overflow".
Added:
Modified:
clang/lib/Analysis/UnsafeBufferUsage.cpp
Removed:
################################################################################
diff --git a/clang/lib/Analysis/UnsafeBufferUsage.cpp b/clang/lib/Analysis/UnsafeBufferUsage.cpp
index ff4f940a596e3..12e99143cb148 100644
--- a/clang/lib/Analysis/UnsafeBufferUsage.cpp
+++ b/clang/lib/Analysis/UnsafeBufferUsage.cpp
@@ -2364,12 +2364,13 @@ template <typename NodeTy>
static std::optional<SourceLocation>
getEndCharLoc(const NodeTy *Node, const SourceManager &SM,
const LangOptions &LangOpts) {
- unsigned TkLen = Lexer::MeasureTokenLength(Node->getEndLoc(), SM, LangOpts);
- SourceLocation Loc = Node->getEndLoc().getLocWithOffset(TkLen - 1);
-
- if (Loc.isValid())
- return Loc;
+ if (unsigned TkLen =
+ Lexer::MeasureTokenLength(Node->getEndLoc(), SM, LangOpts)) {
+ SourceLocation Loc = Node->getEndLoc().getLocWithOffset(TkLen - 1);
+ if (Loc.isValid())
+ return Loc;
+ }
return std::nullopt;
}
More information about the cfe-commits
mailing list