diff options
author | Johnny Chen <johnny.chen@apple.com> | 2010-04-14 01:17:37 +0000 |
---|---|---|
committer | Johnny Chen <johnny.chen@apple.com> | 2010-04-14 01:17:37 +0000 |
commit | efcdac0c41e7f14e81f79762423f30d892792261 (patch) | |
tree | 79382db9678e7b837113fddc6aa2f1404c9f59a6 /lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp | |
parent | 07b3a041b45f376ea182d8b4ade7b01bfaa9ab2c (diff) | |
download | external_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.cpp | 3 |
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()); |