Author: Shafik Yaghmour Date: 2025-03-20T08:17:11-07:00 New Revision: cebc4a167c518d83bb95fddd1c0dd6eebed3d505
URL: https://github.com/llvm/llvm-project/commit/cebc4a167c518d83bb95fddd1c0dd6eebed3d505 DIFF: https://github.com/llvm/llvm-project/commit/cebc4a167c518d83bb95fddd1c0dd6eebed3d505.diff LOG: [Lex][Clang] Add checking to HeaderMapImpl::getString to make it more robust (#131677) Static analysis identified the Len - 1 expression in HeaderMapImpl::getString as problematic if Len is zero. After filing this issue: https://github.com/llvm/llvm-project/issues/130185 Indeed we should be checking MaxLen and verify it is not zero as well. Fixes: https://github.com/llvm/llvm-project/issues/130185 Added: Modified: clang/lib/Lex/HeaderMap.cpp Removed: ################################################################################ diff --git a/clang/lib/Lex/HeaderMap.cpp b/clang/lib/Lex/HeaderMap.cpp index 14731f29486c8..588b32ee9ca8e 100644 --- a/clang/lib/Lex/HeaderMap.cpp +++ b/clang/lib/Lex/HeaderMap.cpp @@ -155,6 +155,10 @@ std::optional<StringRef> HeaderMapImpl::getString(unsigned StrTabIdx) const { const char *Data = FileBuffer->getBufferStart() + StrTabIdx; unsigned MaxLen = FileBuffer->getBufferSize() - StrTabIdx; + + if (MaxLen == 0) + return std::nullopt; + unsigned Len = strnlen(Data, MaxLen); // Check whether the buffer is null-terminated. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits