[llvm] e3ef3e2 - [NativePDB] Fix crash in llvm-pdbutil (#164871)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Nov 1 08:36:43 PDT 2025
Author: Vladimir Gorsunov
Date: 2025-11-01T15:36:38Z
New Revision: e3ef3e24f13a3671a08c742e48c324b429ef6417
URL: https://github.com/llvm/llvm-project/commit/e3ef3e24f13a3671a08c742e48c324b429ef6417
DIFF: https://github.com/llvm/llvm-project/commit/e3ef3e24f13a3671a08c742e48c324b429ef6417.diff
LOG: [NativePDB] Fix crash in llvm-pdbutil (#164871)
Fix out of buffer read when value of --type-index was too big
Co-authored-by: Alexandre Ganea <aganea at havenstudios.com>
Added:
llvm/test/DebugInfo/PDB/Native/pdb-native-index-overflow.test
Modified:
llvm/lib/DebugInfo/CodeView/LazyRandomTypeCollection.cpp
Removed:
################################################################################
diff --git a/llvm/lib/DebugInfo/CodeView/LazyRandomTypeCollection.cpp b/llvm/lib/DebugInfo/CodeView/LazyRandomTypeCollection.cpp
index 6c23ba8f3c466..23ab5344df1ed 100644
--- a/llvm/lib/DebugInfo/CodeView/LazyRandomTypeCollection.cpp
+++ b/llvm/lib/DebugInfo/CodeView/LazyRandomTypeCollection.cpp
@@ -102,7 +102,8 @@ std::optional<CVType> LazyRandomTypeCollection::tryGetType(TypeIndex Index) {
return std::nullopt;
}
- assert(contains(Index));
+ if (!contains(Index))
+ return std::nullopt;
return Records[Index.toArrayIndex()].Type;
}
diff --git a/llvm/test/DebugInfo/PDB/Native/pdb-native-index-overflow.test b/llvm/test/DebugInfo/PDB/Native/pdb-native-index-overflow.test
new file mode 100755
index 0000000000000..aa3f6dcb9632a
--- /dev/null
+++ b/llvm/test/DebugInfo/PDB/Native/pdb-native-index-overflow.test
@@ -0,0 +1,13 @@
+; Test that the native PDB reader isn't crashed by index value bigger than
+; number of types in TPI or IPI stream
+; RUN: llvm-pdbutil dump %p/../Inputs/empty.pdb --type-index=20000000\
+; RUN: | FileCheck -check-prefixes=TYPES,NOT_FOUND %s
+; RUN: llvm-pdbutil dump %p/../Inputs/empty.pdb --id-index=20000000\
+; RUN: | FileCheck -check-prefixes=IDS,NOT_FOUND %s
+
+TYPES: Types (TPI Stream)
+IDS: Types (IPI Stream)
+NOT_FOUND:============================================================
+NOT_FOUND: Showing 1 records.
+NOT_FOUND: Type 0x1312D00 doesn't exist in TPI stream
+
More information about the llvm-commits
mailing list