aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2010-04-14 01:17:37 +0000
committerJohnny Chen <johnny.chen@apple.com>2010-04-14 01:17:37 +0000
commitefcdac0c41e7f14e81f79762423f30d892792261 (patch)
tree79382db9678e7b837113fddc6aa2f1404c9f59a6 /lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
parent07b3a041b45f376ea182d8b4ade7b01bfaa9ab2c (diff)
downloadexternal_llvm-efcdac0c41e7f14e81f79762423f30d892792261.zip
external_llvm-efcdac0c41e7f14e81f79762423f30d892792261.tar.gz
external_llvm-efcdac0c41e7f14e81f79762423f30d892792261.tar.bz2
Fixed an assert() exposed by fuzzing. Now, instead of assert when an invalid
instruction encoding is encountered, we just return a NULL ARMBasicMCBuilder instance and the client just returns false to indicate disassembly error. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101201 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp')
-rw-r--r--lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp b/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
index 98bb671..aedd22e 100644
--- a/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
+++ b/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
@@ -3257,6 +3257,9 @@ ARMBasicMCBuilder::ARMBasicMCBuilder(unsigned opc, ARMFormat format,
/// are responsible for freeing up of the allocated memory. Cacheing can be
/// performed by the API clients to improve performance.
ARMBasicMCBuilder *llvm::CreateMCBuilder(unsigned Opcode, ARMFormat Format) {
+ // For "Unknown format", fail by returning a NULL pointer.
+ if ((unsigned)Format >= (array_lengthof(FuncPtrs) - 1))
+ return 0;
return new ARMBasicMCBuilder(Opcode, Format,
ARMInsts[Opcode].getNumOperands());