Detect invalid section indexes when we first read them.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 22 May 2015 14:59:27 +0000 (14:59 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 22 May 2015 14:59:27 +0000 (14:59 +0000)
We still detect the same errors, but now we do it earlier.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238024 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/MachOObjectFile.cpp
test/Object/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentName [deleted file]
test/Object/macho-invalid.test

index fc7b5f2..504b317 100644 (file)
@@ -537,6 +537,8 @@ std::error_code MachOObjectFile::getSymbolSection(DataRefImpl Symb,
   } else {
     DataRefImpl DRI;
     DRI.d.a = index - 1;
+    if (DRI.d.a >= Sections.size())
+      report_fatal_error("getSymbolSection: Invalid section index.");
     Res = section_iterator(SectionRef(DRI, this));
   }
 
@@ -2146,8 +2148,7 @@ MachOObjectFile::getSectionFinalSegmentName(DataRefImpl Sec) const {
 
 ArrayRef<char>
 MachOObjectFile::getSectionRawName(DataRefImpl Sec) const {
-  if (Sec.d.a >= Sections.size())
-    report_fatal_error("getSectionRawName: Invalid section index");
+  assert(Sec.d.a < Sections.size() && "Should have detected this earlier");
   const section_base *Base =
     reinterpret_cast<const section_base *>(Sections[Sec.d.a]);
   return makeArrayRef(Base->sectname);
@@ -2155,8 +2156,7 @@ MachOObjectFile::getSectionRawName(DataRefImpl Sec) const {
 
 ArrayRef<char>
 MachOObjectFile::getSectionRawFinalSegmentName(DataRefImpl Sec) const {
-  if (Sec.d.a >= Sections.size())
-    report_fatal_error("getSectionRawFinalSegmentName: Invalid section index");
+  assert(Sec.d.a < Sections.size() && "Should have detected this earlier");
   const section_base *Base =
     reinterpret_cast<const section_base *>(Sections[Sec.d.a]);
   return makeArrayRef(Base->segname);
diff --git a/test/Object/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentName b/test/Object/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentName
deleted file mode 100644 (file)
index e3f6586..0000000
Binary files a/test/Object/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentName and /dev/null differ
index ac4bbeb..dae5c4e 100644 (file)
@@ -25,11 +25,8 @@ RUN:      | FileCheck -check-prefix BAD-SYMBOL %s
 RUN: not llvm-objdump -t %p/Inputs/macho-invalid-symbol-name-past-eof 2>&1 \
 RUN:      | FileCheck -check-prefix NAME-PAST-EOF %s
 
-RUN: not llvm-objdump -t %p/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentName 2>&1 \
-RUN:      | FileCheck -check-prefix INVALID-SECTION-IDX-SEG-NAME %s
-
 RUN: not llvm-nm %p/Inputs/macho-invalid-section-index-getSectionRawName 2>&1 \
-RUN:      | FileCheck -check-prefix INVALID-SECTION-IDX-SECT-NAME %s
+RUN:      | FileCheck -check-prefix INVALID-SECTION-IDX-SYMBOL-SEC %s
 
 RUN: not llvm-objdump -t %p/Inputs/macho-invalid-getsection-index 2>&1 \
 RUN:      | FileCheck -check-prefix INVALID-SECTION-IDX-GETSECT %s
@@ -45,7 +42,6 @@ TOO-MANY-SECTS: Number of sections too large for size of load command
 BAD-SYMBOL: Requested symbol index is out of range
 NAME-PAST-EOF: Symbol name entry points before beginning or past end of file
 
-INVALID-SECTION-IDX-SEG-NAME: getSectionRawFinalSegmentName: Invalid section index
-INVALID-SECTION-IDX-SECT-NAME: getSectionRawName: Invalid section index
+INVALID-SECTION-IDX-SYMBOL-SEC: getSymbolSection: Invalid section index
 INVALID-SECTION-IDX-GETSECT: getSection: Invalid section index
 INVALID-SECTION-IDX-GETSECT64: getSection64: Invalid section index