diff --git a/llvm/lib/DWP/DWP.cpp b/llvm/lib/DWP/DWP.cpp index 44e39c019e0ca..346f4dfd290d1 100644 --- a/llvm/lib/DWP/DWP.cpp +++ b/llvm/lib/DWP/DWP.cpp @@ -18,6 +18,7 @@ #include "llvm/Object/Decompressor.h" #include "llvm/Object/ELFObjectFile.h" #include "llvm/Support/MemoryBuffer.h" +#include using namespace llvm; using namespace llvm::object; @@ -654,6 +655,12 @@ Error write(MCStreamer &Out, ArrayRef Inputs) { IndexVersion)]; C.Offset = InfoSectionOffset; C.Length = Header.Length + 4; + + if (std::numeric_limits::max() - InfoSectionOffset < + C.Length) + return make_error( + "debug information section offset is greater than 4GB"); + UnitOffset += C.Length; if (Header.Version < 5 || Header.UnitType == dwarf::DW_UT_split_compile) {