From 5b773dcd2de0c4844814266a90dac14c349b8f18 Mon Sep 17 00:00:00 2001 From: Paul Pluzhnikov Date: Tue, 18 Oct 2022 20:47:55 +0000 Subject: [PATCH] Fix incorrect check for running out of source locations. When CurrentLoadedOffset is less than TotalSize, current code will trigger unsigned overflow and will not return an "allocation failed" indicator. Google ref: b/248613299 Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D135192 --- clang/lib/Basic/SourceManager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index 6aae581..20bb594 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -454,8 +454,10 @@ SourceManager::AllocateLoadedSLocEntries(unsigned NumSLocEntries, SourceLocation::UIntTy TotalSize) { assert(ExternalSLocEntries && "Don't have an external sloc source"); // Make sure we're not about to run out of source locations. - if (CurrentLoadedOffset - TotalSize < NextLocalOffset) + if (CurrentLoadedOffset < TotalSize || + CurrentLoadedOffset - TotalSize < NextLocalOffset) { return std::make_pair(0, 0); + } LoadedSLocEntryTable.resize(LoadedSLocEntryTable.size() + NumSLocEntries); SLocEntryLoaded.resize(LoadedSLocEntryTable.size()); CurrentLoadedOffset -= TotalSize; -- 2.7.4