[clang] 28ccf32 - [pseudo] Fix an out-of-bound access for LRTable::Actions.

Haojian Wu via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 3 05:27:59 PST 2022


Author: Haojian Wu
Date: 2022-03-03T14:27:44+01:00
New Revision: 28ccf326725d0fea8648834c8acdbdfe3aa40d7a

URL: https://github.com/llvm/llvm-project/commit/28ccf326725d0fea8648834c8acdbdfe3aa40d7a
DIFF: https://github.com/llvm/llvm-project/commit/28ccf326725d0fea8648834c8acdbdfe3aa40d7a.diff

LOG: [pseudo] Fix an out-of-bound access for LRTable::Actions.

Without this patch, when End == Start, we access Actions[Actions.end()]
though we return an empty result.
This fixes an assertion failure in MSVC STL debug build.

Added: 
    

Modified: 
    clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp b/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp
index 4f1494fff277d..957d17a503cf0 100644
--- a/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp
+++ b/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp
@@ -112,6 +112,8 @@ llvm::ArrayRef<LRTable::Action> LRTable::find(StateID Src, SymbolID ID) const {
          "subrange of the StateIdx should be sorted!");
   const LRTable::StateID *Start = llvm::partition_point(
       TargetedStates, [&Src](LRTable::StateID S) { return S < Src; });
+  if (Start == TargetedStates.end())
+    return {};
   const LRTable::StateID *End = Start;
   while (End != TargetedStates.end() && *End == Src)
     ++End;


        


More information about the cfe-commits mailing list