aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Gorsunov <gorsunov@gmail.com>2025-11-01 17:36:38 +0200
committerGitHub <noreply@github.com>2025-11-01 15:36:38 +0000
commite3ef3e24f13a3671a08c742e48c324b429ef6417 (patch)
tree3aeddfd303955eba64af2007a61cdbb95bf9c110
parentfe1491b7258aaf821cda89d5ed5f5c5248007136 (diff)
downloadllvm-e3ef3e24f13a3671a08c742e48c324b429ef6417.zip
llvm-e3ef3e24f13a3671a08c742e48c324b429ef6417.tar.gz
llvm-e3ef3e24f13a3671a08c742e48c324b429ef6417.tar.bz2
[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@havenstudios.com>
-rw-r--r--llvm/lib/DebugInfo/CodeView/LazyRandomTypeCollection.cpp3
-rwxr-xr-xllvm/test/DebugInfo/PDB/Native/pdb-native-index-overflow.test13
2 files changed, 15 insertions, 1 deletions
diff --git a/llvm/lib/DebugInfo/CodeView/LazyRandomTypeCollection.cpp b/llvm/lib/DebugInfo/CodeView/LazyRandomTypeCollection.cpp
index 6c23ba8..23ab534 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 0000000..aa3f6dc
--- /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
+