From 79e8215f9663d85fea337e72af47e3ca78d470b4 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Thu, 29 Aug 2013 07:34:58 +0000 Subject: [PATCH] [PECOFF] Fix bug that atom size was sometimes wrong. Because of a bug, the last atom of each section contained a garbage at the end of its data. In most cases the garbage is harmless but it could have cause SEGV. llvm-svn: 189572 --- lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp | 2 +- lld/test/pecoff/hello.test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp index eecafa89768a..9c6c94596e34 100644 --- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp @@ -438,7 +438,7 @@ private: const uint8_t *start = secData.data() + (*si)->Value; // if this is the last symbol, take up the remaining data. const uint8_t *end = (si + 1 == se) - ? start + secData.size() + ? secData.data() + secData.size() : secData.data() + (*(si + 1))->Value; ArrayRef data(start, end); auto *atom = new (_alloc) COFFDefinedAtom( diff --git a/lld/test/pecoff/hello.test b/lld/test/pecoff/hello.test index cc1e13215e2c..575ff709818b 100644 --- a/lld/test/pecoff/hello.test +++ b/lld/test/pecoff/hello.test @@ -36,7 +36,7 @@ SECTIONS: } SECTIONS: Section { SECTIONS: Number: 2 SECTIONS: Name: .data (2E 64 61 74 61 00 00 00) -SECTIONS: VirtualSize: 0x18 +SECTIONS: VirtualSize: 0x12 SECTIONS: VirtualAddress: 0x2000 SECTIONS: RawDataSize: 512 SECTIONS: PointerToRawData: 0x400 -- GitLab