Index: lib/ReaderWriter/MachO/ArchHandler.cpp =================================================================== --- lib/ReaderWriter/MachO/ArchHandler.cpp +++ lib/ReaderWriter/MachO/ArchHandler.cpp @@ -142,6 +142,9 @@ bool ArchHandler::isDwarfCIE(bool isBig, const DefinedAtom *atom) { assert(atom->contentType() == DefinedAtom::typeCFI); + if (atom->rawContent().size() < sizeof(uint32_t)) { + return false; + } uint32_t size = read32(atom->rawContent().data(), isBig); uint32_t idOffset = sizeof(uint32_t); Index: lib/ReaderWriter/MachO/CompactUnwindPass.cpp =================================================================== --- lib/ReaderWriter/MachO/CompactUnwindPass.cpp +++ lib/ReaderWriter/MachO/CompactUnwindPass.cpp @@ -411,11 +411,13 @@ } } - using normalized::read32; - entry.rangeLength = - read32(atom->rawContent().data() + 2 * sizeof(uint32_t), _isBig); - entry.encoding = - read32(atom->rawContent().data() + 3 * sizeof(uint32_t), _isBig); + if (atom->rawContent().size() > 4 * sizeof(uint32_t)) { + using normalized::read32; + entry.rangeLength = + read32(atom->rawContent().data() + 2 * sizeof(uint32_t), _isBig); + entry.encoding = + read32(atom->rawContent().data() + 3 * sizeof(uint32_t), _isBig); + } return entry; }